USB
Switch the micro USB-on-the-go-connector (usable as a “normal” port, e.g. for connecting a Wireless LAN card or a USB thumbdrive) to host-mode:# echo 1 >/sys/bus/platform/drivers/tegra-otg/tegra-otg/enable_host
Devices connected to the micro-usb with a OTG cable will now appear as usual, on the new “usb3” port.
Flash/Boot
Linux-Images to be run by the stock u-boot should look like this:# mkimage -l /mnt/linux.img
Image Name: Linux_3_1_10+
Created: Sun Oct 20 03:14:16 2013
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 6198328 Bytes = 6053.05 kB = 5.91 MB
Load Address: 00008000 ← !
Entry Point: 00008000 ← !
These are “legacy” images. The newer .its-based images work, too, but only with newer kernels (I tried 3.10 and 3.11) and those are broken in different ways, see below.
Copy the linux-images to the “default location” in internal NAND flash where 0x00800000 is the mtd device size (must be a multiple of the “erase block size” and 6198392 is your image file size). “/dev/mtd6” is the “LNX” partition when using the stock mtdparts command line option.
# mtd_debug erase /dev/mtd6 0 0x00800000
Erased 8388608 bytes from address 0x00000000 in flash
# mtd_debug write /dev/mtd6 0 6198392 /mnt/linux.img
Copied 6198392 bytes from /mnt/linux.img to address 0x00000000 in flash
“mtd_debug” is part of the “mtd-utils” package.
To find the correct flash block, have a look at /proc/mtd:
# cat /proc/mtd
dev: size erasesize name
mtd0: 3de80000 00080000 "USR"
mtd1: 00300000 00080000 "BCT"
mtd2: 00080000 00080000 "PT"
mtd3: 00200000 00080000 "EBT"
mtd4: 00080000 00080000 "BMP"
mtd5: 00200000 00080000 "ENV"
mtd6: 00800000 00080000 "LNX" ← !
mtd7: 00080000 00080000 "ARG"
The partitions are shown in proper (NAND-flash) order in u-boot's mtdparts command (even though this also only parses the mtdparts variable):
Tegra2 # mtdparts (note: u-boot prompt, not Linux!)
device nand0
#: name size offset mask_flags
0: BCT 0x00300000 0x00000000 0
1: PT 0x00080000 0x00500000 0
2: EBT 0x00200000 0x00780000 0
3: BMP 0x00080000 0x00b80000 0
4: ENV 0x00200000 0x00e00000 0
5: LNX 0x00800000 0x01200000 0
6: ARG 0x00080000 0x01c80000 0
7: USR 0x3de80000 0x01f80000 0
ENV is the u-boot environment, LNX is the default location for the linux kernel, USR the root-filesystem if running from internal flash. For the other partitions, I'm not sure. There's a “lnx_nand.cfg” in Toradex' T20_LinuxImageV2.0 which might shed a light on the exact purpose of all the unexplained partitions, unfortunately this seems to be handled by NVidias binary-only nvflash utility.
Booting with your root-fs on a sd-card (use no cards slower than class 10):
(u-boot environment variables)
myargs=root=/dev/mmcblk0p1 rootfstype=ext4 rootflags=data=writeback,commit=15 rootdelay=5,noatime,nodiratime
myboot=run setup; setenv bootargs ${defargs} ${myargs} ${mtdparts} ${setupargs} ; run myload ; bootm
myload=nboot ${loadaddr} 0 ${lnxoffset}
In principle, the kernel could also be started of a mmc drive:
Tegra2 # fatload mmc 0:1 $loadaddr linux.img
reading linux.img
mmc_send_cmd: MMC Timeout
Interrupt status 0x00000001
Interrupt status enable 0xfbff003b
Interrupt signal enable 0xfbff0002
Present status 0x01e70206
6198392 bytes read
If you want to test a new kernel, booting over TFTP/Network (wired ethernet) or from a USB-disk works as expected (example below uses the same sd-card not working above, in a cheap and crappy usb card-reader):.
Tegra2 # fatload usb 0:1 $loadaddr linux.img
reading linux.img
6198392 bytes read
Tegra2 # bootm
## Booting kernel from Legacy Image at 00408000 ...
Image Name: Linux_3_1_10+
Created: 2013-10-20 9:14:16 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 6198328 Bytes = 5.9 MiB
Load Address: 00008000
Entry Point: 00008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
Starting kernel ...
Kernel and Distribution
I didn't have much luck with a more-recent stock-kernel, the most serious problem in those kernel being a misconfiguration of the voltage regulators. My board became very hot and was pretty unstable. So I'm sticking with the antiquated vendor supplied kernel (3.1.10) right now with a config based on the Toradex shipped one.I'm running ArchLinux based on the root-filesystem for the compact TrimSlice computer which also runs on a NVidia Tegra.
No comments:
Post a Comment