Tegra/Mainline SW/Gentoo From SD Card

From eLinux.org
< Tegra‎ | Mainline SW
Revision as of 04:00, 9 July 2014 by Civil (talk | contribs) (Add missing package to emerge list.)
Jump to: navigation, search

This article assumes you are running on a host Gentoo system, and have already got a cross compiler set up as armv7a-hardfloat-linux-gnueabi-

mkdir -p ~/jetson
cd ~/jetson
mkdir tegra-uboot-flasher
cd tegra-uboot-flasher
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > repo
chmod a+x repo
./repo init -u git://github.com/NVIDIA/tegra-uboot-flasher-manifests.git -g default,-bootloader
./repo sync
sudo emerge crypto++ libusb dtc
cd tegrarcm
./autogen.sh
./configure
make -j $(grep -c processor /proc/cpuinfo)
cd ../cbootimage
./autogen.sh
./configure
make -j $(grep -c processor /proc/cpuinfo)
cd ..
git clone https://github.com/swarren/u-boot
cd scripts
CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- PATH=${PATH}:~/jetson/tegra-uboot-flasher/tegrarcm/src/:/home/steev/sandbox/jetson/tegra-uboot-flasher/cbootimage/src/ ./build  --boards jetson-tk1 build

<put board into "fastboot" mode - hold down force recovery button and hit reset if it's on, power button otherwise, then release force reset)>

<connect serial port if it isn't already>


NOTE: This currently EXECUTES the u-boot bootloader, it DOES NOT flash it to the board, so you can make changes as you want/need and they don't stick around. If you would like them to stick around, then change the 'exec' in this next line to 'flash'

sudo PATH=${PATH}:~/jetson/tegra-uboot-flasher/tegrarcm/src/:~/jetson/tegra-uboot-flasher/cbootimage/src/ ./tegra-uboot-flasher --debug exec jetson-tk1

On serial port, you should see u-boot attempt to boot.

Now we prepare an sdcard.

sudo parted /dev/sdb --script -- mklabel msdos
sudo parted /dev/sdb --script -- mkpart primary ext2 2048s 264191s
sudo parted /dev/sdb --script -- mkpart primary ext4 264192s 100%
sudo mkfs.ext2 /dev/sdb1
sudo mkfs.ext4 /dev/sdb2
sudo mkdir -p /mnt/gentoo
sudo mount /dev/sdb2 /mnt/gentoo
sudo mkdir /mnt/gentoo/boot
sudo mount /dev/sdb1 /mnt/gentoo/boot
cd /mnt/gentoo
sudo <wget latest hardfloat stage3 tarball>
sudo tar -xpf stage3tarball-name

Set the password to gentoo (all LOWERCASE)

sudo $EDITOR /mnt/gentoo/etc/shadow
root:$6$I9Q9AyTL$Z76H7wD8mT9JAyrp/vaYyFwyA5wRVN0tze8pvM.MqScC7BBm2PU7pLL0h5nSxueqUpYAlZTox4Ag2Dp5vchjJ0:14698:0:::::

Set up serial console so we can login via serial console.

sudo $EDITOR /mnt/gentoo/etc/inittab
s0:12345:respawn:/sbin/agetty -L 115200 ttyS0 vt100

Let's build a kernel - so many to choose from... I chose Thierry Reding's tree.

Be sure to check http://patchwork.ozlabs.org/project/linux-tegra/list/ for possible patches you may want/need. Some patch sets will rely on others being there as well!

cd ~/jetson
git clone https://git.gitorious.org/thierryreding/linux.git
cd linux
make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- tegra_defconfig
make -j $(grep -c processor /proc/cpuinfo)
sudo cp arch/arm/boot/zImage /mnt/gentoo/boot/
sudo cp arch/arm/boot/dts/tegra124-jetson-tk1.dtb /mnt/gentoo/boot/
sudo make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- INSTALL_MOD_PATH=/mnt/gentoo modules_install


To get a boot.scr file:

cd ~/jetson
git clone https://github.com/NVIDIA/tegra-uboot-scripts/
cd tegra-uboot-scripts/

Because we use a separate boot partition, apply this patch so it knows where to find the files.

diff --git a/gen-uboot-script.py b/gen-uboot-script.py
index 46847e5..374db49 100755
--- a/gen-uboot-script.py
+++ b/gen-uboot-script.py
@@ -107,7 +107,7 @@ if args.type == 'net':
     prefix=
 else:
     load='load ${devtype} ${devnum}:${rootpart}'
-    prefix='/boot/'
+    prefix='/'
 
 f.write(load + ' ${kernel_addr_r} ' + prefix + 'zImage\n')


Now we create the boot.scr file.

sudo ./part-uuid.py /dev/sdb 2
./gen-uboot-script.py --partuuid <uuid-output-from-part-uuid.py-command>
sudo cp boot.scr /mnt/gentoo/boot
sudo sync
sudo umount /mnt/gentoo/boot
sudo umount /mnt/gentoo

Pop sdcard into the Jetson TK1 and type boot on the serial console, and it should attempt to boot from the sdcard.

After a bit, you should see a login prompt on the serial console, and if HDMI is enabled, you should actually see OpenRC starting up on the screen and once it's booted, the login prompt will show up there.