using SD card as root in Jetson TK1

Hi!

I want use my external SD Card as a root system in Jetson TK1

I mean… I want to install packages in my SD card not in the internal emmc.

As you all know internal emmc in jetson TK1 is only 16GB, so it is too small to install packages what I want.

I installed, Tegra_Linux_R21.4.0, Jetpack L4T 2.1, ZED Stereo camera SDK, Eclipse-CDT, and some other minor packages. However now I have only 2.2GB free space.

I’ve tried quite many ways to use SD card as a root system as I said, however it is not properly worked.

The sites what I’ve refer is like these

http://demotomohiro.github.io/hardware/jetson_tk1/setup/sdcard.html

http://demotomohiro.github.io/hardware/jetson_tk1/setup/external_storage.html

and some other ways which I’ve found on google.

could you help me how to do this?

Thanks,

My sdcard is SAMSUNG MB_MP64D (64GB Micro SD Card)

I believe all you have to do is to change the extlinux.conf file in /boot/extlinux/

There should be 4 other files with different extensions, each signifying which device to boot from.
If you compare the extlinux.conf it should be be identical to the mmc one.

You want the one with the sd extension. Just copy the sd file to extlinux.conf

I like the extlinux.conf method as well. Things get a lot easier if you simply install to eMMC, but then add a boot entry to tell the system the root partition is on the SD card. When you say to install to SD card, then the boot loader itself goes there, causing the SD card to have to be present for the system to even try to boot. So I suggest install normally to eMMC, create your file system on SD card, put that in, and then create an alternate entry in “/boot/extlinux/extlinux.conf”. You’ll then be able to use serial console to switch entries at boot time; if things look ok, you can make the SD card the default choice. When things work, you’ll still have the non-SD card eMMC as a “rescue” system.

For this next part, keep in mind that not all SD cards are the same quality…most work to store data, but some fail under more strenuous use as a root file system.

To create your root on the SD card, go to your host, format the SD card partition as ext4, and then mount it somewhere. Next, you can either create the rootfs from a clone of a known good JTK1, or via unpacking the sample rootfs there (plus the apply_binaries.sh script of the driver package).

If you use the driver package instead of clone, and if you have already mounted the ext4 SD card to /mnt, then the steps are something like this:

cd /mnt
sudo tar xvjf /wherever/sample/rootfs/is/Tegra_Linux_Sample-Root-Filesystem_R21.4.0_armhf.tbz2
cd /wherever/driver/package/is/Linux_for_Tegra
sudo ./apply_binaries.sh -r /mnt
cd
umount /mnt

Alternately, you could skip unpacking sample rootfs and apply_binaries.sh by using a loopback mounted clone and copy via sudo cp -adpR from the clone to the mount point of the SD card. Disadvantage: Lots of time to create the clone. Advantage: exact copy of the Jetson you cloned, including all updates and configuration.

In a running Jetson, edit /boot/extlinux/extlinux.conf, and add a duplicate entry with a new LABEL and MENU LABEL, then find and change from the APPEND text “root=/dev/mmcblk0p1” to instead be “root=/dev/mmcblk1p1”. My test entry is like this:

LABEL SDcard
      MENU LABEL SD Card
      LINUX /boot/zImage
      FDT /boot/tegra124-jetson_tk1-pm375-000-c00-00.dtb
      APPEND console=ttyS0,115200n8 console=tty1 no_console_suspend=1 lp0_vec=2064@0xf46ff000 mem=2015M@2048M memtype=255 ddr_die=2048M@2048M section=256M pmuboard=0x0177:0x0000:0x02:0x43:0x00 tsec=32M@3913M otf_key=c75e5bb91eb3bd947560357b64422f85 usbcore.old_scheme_first=1 core_edp_mv=1150 core_edp_ma=4000 tegraid=40.1.1.0.0 debug_uartport=lsport,3 power_supply=Adapter audio_codec=rt5640 modem_id=0 android.kerneltype=normal fbcon=map:1 commchip_id=0 usb_port_owner_info=0 lane_owner_info=6 emc_max_dvfs=0 touch_id=0@0 board_info=0x0177:0x0000:0x02:0x43:0x00 <b>root=/dev/mmcblk1p1</b> rw rootwait tegraboot=sdmmc gpt

Boot with serial console running and select that new entry.

Note that when the SD card is mounted as rootfs, that the /boot of the SD card will show up, but it is really the /boot of the eMMC which is running…changes to boot time behavior would go in the eMMC /boot, changes to the run time /boot would go to the SD card’s /boot.