I some how managed to mess up the file system on my Jetson TK1 within 2 days of receiving it and decided to start afresh by flashing back to the original rootfs.
NVIDIA provides a quick start guide on how to do this here on its Linux for Tegra R19 webpage. I am essentially paraphrasing those instructions so that I can get this done quicker the next time. Since the instructions are specific to release version it is possible that they could change for the next release.
You will need:
- A Linux host PC with enough free space on which you will prepare the file system before flashing it to the eMMC on the TK1 board over USB.
- micro USB to USB cable (should be included with the Jetson TK1 kit)
Download the following two files into the same folder:
- Jetson TK1 board support package aka BSP (called Tegra124_Linux_R19.2.0_armhf.tbz2) from here.
- Sample file system file (called Tegra_Linux_Sample-Root-Filesystem_R19.2.0_armhf.tbz2) from here.
mkdir tk1_reflash cd tk1_reflash wget https://developer.nvidia.com/sites/default/files/akamai/mobile/files/L4T/Tegra124_Linux_R19.2.0_armhf.tbz2 wget https://developer.nvidia.com/sites/default/files/akamai/mobile/files/L4T/Tegra_Linux_Sample-Root-Filesystem_R19.2.0_armhf.tbz2
Extract the BSP tarball:
sudo tar xpf Tegra124_Linux_R19.2.0_armhf.tbz2
Extract the FS tarball into a particular sub directory:
cd Linux_for_Tegra/rootfs sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_R19.2.0_armhf.tbz2
cd .. sudo ./apply_binaries.sh
The following output will be seen:
Using rootfs directory of: /home/you/tk1_reflash/Linux_for_Tegra/rootfs Extracting the NVIDIA user space components to /home/you/tk1_reflash/Linux_for_Tegra/rootfs Extracting the NVIDIA gst test applications to /home/you/tk1_reflash/Linux_for_Tegra/rootfs Extracting the configuration files for the supplied root filesystem to /home/you/tk1_reflash/Linux_for_Tegra/rootfs Creating a symbolic link nvgstplayer pointing to nvgstplayer-0.10 Adding symlink libcuda.so --> libcuda.so.1.1 Extracting the firmwares and kernel modules to /home/you/tk1_reflash/Linux_for_Tegra/rootfs Installing the board *.dtb files into /home/you/tk1_reflash/Linux_for_Tegra/rootfs/boot Success!
Write to eMMC over usb:
- Put your system into “reset recovery mode” by holding down the “RECOVERY” button and press “RESET” button once on the main board.
- Ensure your Linux host system is connected to the target device through the USB cable for flashing.
Verify that board was connected by running:
lsusb | grep -i nvidia
You should see the following:
Bus 002 Device 004: ID 0955:7140 NVidia Corp.
Next run the following command. I think the eMMC is supposed to the 16GiB, but I just used the exact command from the NVIDIA readme assuming that I should be able to resize it later.
sudo ./flash.sh -S 8GiB jetson-tk1 mmcblk0p1
UPDATE: The above command will leave space unused as pointed in the comments. To use all of the eMMC use “-S 14580MiB” (from: http://elinux.org/Jetson_TK1#If_you_need_more_disk_space_on_the_eMMC)
This should print something like the following and will take a loooong time:
copying dtbfile(/home/foobar/l4t/Linux_for_Tegra/kernel/dtb/tegra124-pm375.dtb) to tegra124-pm375.dtb... done. Making system.img... populating rootfs from /home/foobar/l4t/Linux_for_Tegra/rootfs... done. Sync'ing... done. System.img built successfully. copying bctfile(/home/foobar/l4t/Linux_for_Tegra/bootloader/ardbeg/BCT/PM375_Hynix_2GB_H5TC4G63AFR_RDA_924MHz.cfg) to bct.cfg... done. copying cfgfile(/home/foobar/l4t/Linux_for_Tegra/bootloader/ardbeg/cfg/gnu_linux_fastboot_emmc_full.cfg) to flash.cfg... done. creating gpt(ppt.img)... *** GPT Parameters *** device size -------------- 15766388736 bootpart size ------------ 8388608 userpart size ------------ 15758000128 Erase Block Size --------- 2097152 sector size -------------- 4096 Partition Config file ---- flash.cfg Visible partition flag --- GP1 Primary GPT output ------- PPT->ppt.img Secondary GPT output ----- GPT->gpt.img Target device name ------- none *** PARTITION LAYOUT(16 partitions) *** [ BCT] BH 0 16383 8.0MiB [ PPT] UH 0 4095 2.0MiB ppt.img [ PT] UH 4096 8191 2.0MiB [ EBT] UH 8192 16383 4.0MiB fastboot.bin [ LNX] UH 16384 32767 8.0MiB boot.img [ SOS] UH 32768 45055 6.0MiB [ GP1] UH 45056 49151 2.0MiB [ APP] UV 49152 16826367 8192.0MiB system.img [ DTB] UV 16826368 16834559 4.0MiB tegra124-pm375.dtb [ EFI] UV 16834560 16965631 64.0MiB [ USP] UV 16965632 16973823 4.0MiB [ TP1] UV 16973824 16982015 4.0MiB [ TP2] UV 16982016 16990207 4.0MiB [ TP3] UV 16990208 16998399 4.0MiB [ UDA] UV 16998400 30773247 6726.0MiB [ GPT] UH 30773248 30777343 2.0MiB gpt.img done. copying bootloader(/home/foobar/l4t/Linux_for_Tegra/bootloader/ardbeg/fastboot.bin)... done. Bootloader(/home/foobar/l4t/Linux_for_Tegra/bootloader/ardbeg/fastboot.bin) used as flasher. Existing flash application(/home/foobar/l4t/Linux_for_Tegra/bootloader/nvflash) reused. making zero initrd... done. Making Boot image... done *** Flashing target device started. *** ./nvflash --bct bct.cfg --setbct --configfile flash.cfg --create --bl fastboot.bin --odmdata 0x6009C000 --go Nvflash 4.13.0000 started chip uid from BR is: 0x340010017408c1431c00000016018080 rcm version 0X400001 Skipping BoardID read at miniloader level System Information: chip name: unknown chip id: 0x40 major: 1 minor: 1 chip sku: 0x81 chip uid: 0x000000017408c1431c00000016018080 macrovision: disabled hdcp: enabled jtag: enabled sbk burned: false board id: 0 warranty fuse: 0 dk burned: true boot device: emmc operating mode: 3 device config strap: 0 device config fuse: 0 sdram config strap: 3 RCM communication completed BCT sent successfully odm data: 0x6009c000 downloading bootloader -- load address: 0x80108000 entry point: 0x80108000 sending file: fastboot.bin - 900492/900492 bytes sent fastboot.bin sent successfully waiting for bootloader to initialize bootloader downloaded successfully ML execution and Cpu Handover took 1 Secs Partition backup took 0 Secs setting device: 2 3 deleting device partitions creating partition: BCT creating partition: PPT creating partition: PT creating partition: EBT creating partition: LNX creating partition: SOS creating partition: GP1 creating partition: APP creating partition: DTB creating partition: EFI creating partition: USP creating partition: TP1 creating partition: TP2 creating partition: TP3 creating partition: UDA creating partition: GPT sending file: ppt.img \ 2097152/2097152 bytes sent ppt.img sent successfully padded 4 bytes to bootloader sending file: fastboot.bin - 900496/900496 bytes sent fastboot.bin sent successfully sending file: boot.img \ 5912576/5912576 bytes sent boot.img sent successfully sending file: system.img / 8589934592/8589934592 bytes sent system.img sent successfully sending file: tegra124-pm375.dtb - 34723/34723 bytes sent tegra124-pm375.dtb sent successfully sending file: gpt.img \ 2097152/2097152 bytes sent gpt.img sent successfully Create, format and download took 1515 Secs Time taken for flashing 1516 Secs *** The target ardbeg has been flashed successfully. *** Reset the board to boot from internal eMMC. ~/l4t/Linux_for_Tegra >
And thats it, we are all done!
Reboot your board and try not to mess up the file system again.
UPDATE: Added a short list of things I like to do post-install.
# verify that start stop restart works sudo poweroff sudo reboot #got net? sudo ping google.com # get correct time sudo ntpdate pool.ntp.org # setup timezone, select US/Pacific sudo dpkg-reconfigure tzdata # set sysclock, only if internet is down #sudo date mmddhhmmyyyy.ss #sudo date 050607002014 # check time on HW RTC sudo hwclock --debug # sync HW RTC to sysclock sudo hwclock -w # add automatic time update at startup and to crontab sudo vi /etc/rc.local # add the following lines ntpdate-debian hwclock -w # edit crontab for root sudo crontab -e # add following lines 5 * * * * ntpdate-debian 7 * * * * hwclock -w # disable gui desktop and window manager sudo mv /etc/init/lightdm.conf /etc/init/lightdm.conf.disabled # from here: http://www.pathbreak.com/blog/ubuntu-startup-init-scripts-runlevels-upstart-jobs-explained # enable universe in the apt source list sudo vi /etc/apt/sources.list # update and upgrade sudo apt-get update && sudo apt-get upgrade # install useful packages sudo apt-get install git screen tree tcsh vim-gtk # misc cleanup sudo apt-get autoclean & sudo apt-get clean