This is an old revision of the document!
Here I'm documenting my progress on using my ac100-116 “the right way”. Feel free to reach me on irc, my nick is PaulFertser.
First things first: for now the serial console is needed because the kernel doesn't yet initialise the display properly.
I use a toolchain compiled by Gentoo crossdev, putusb, uboot.
Configure u-boot with “make paz00_config” and build it with your toolchain.
Kernel should have all tegrapart-related options disabled, as tegrapart oopses when there's no corresponding option on the command line. Also a minor kernel patch seem to be needed for now.
diff --git a/arch/arm/mach-tegra/board-paz00-panel.c b/arch/arm/mach-tegra/board-paz00-panel.c
index e65488d..f8cf7d4 100644
--- a/arch/arm/mach-tegra/board-paz00-panel.c
+++ b/arch/arm/mach-tegra/board-paz00-panel.c
@@ -346,9 +346,11 @@ int __init paz00_panel_init(size_t fb_addr)
gpio_request_one(TEGRA_HDMI_HPD, GPIOF_IN, "hdmi_hpd");
gpio_export(TEGRA_LVDS_SHUTDOWN, 0);
- paz00_disp1_resources[2].start = fb_addr;
- /* 2.4 MB framebuffer should be enough */
- paz00_disp1_resources[2].end = fb_addr + 0x26B000 - 1;
+ if (fb_addr) {
+ paz00_disp1_resources[2].start = fb_addr;
+ /* 2.4 MB framebuffer should be enough */
+ paz00_disp1_resources[2].end = fb_addr + 0x26B000 - 1;
+ }
err = platform_add_devices(paz00_gfx_devices,
ARRAY_SIZE(paz00_gfx_devices));
diff --git a/arch/arm/mach-tegra/clock.c b/arch/arm/mach-tegra/clock.c
index 9e06a21..65c1137 100644
--- a/arch/arm/mach-tegra/clock.c
+++ b/arch/arm/mach-tegra/clock.c
@@ -339,9 +339,14 @@ int clk_set_rate_locked(struct clk *c, unsigned long rate)
return ret;
}
- ret = c->ops->set_rate(c, rate);
- if (ret)
- return ret;
+ if (c->ops && c->ops->set_rate) {
+ ret = c->ops->set_rate(c, rate);
+ if (ret)
+ return ret;
+ } else {
+ pr_warn("set_rate() for %s is needed but not available\n",
+ c->name);
+ }
if (clk_is_auto_dvfs(c) && rate < old_rate && c->refcnt > 0)
ret = tegra_dvfs_set_rate(c, rate);
I then used my laptop and an SD card, created a single ext2 partition there and unpacked the preinstalled ubuntu rootfs. Copied the uImage to root and the created modules to /lib/modules. Erased unneeded boot scripts (including network-manager) from /etc/init/. Created there a file to start getty on ttyS0, 115200 baud. Placed a suitable wpa_supplicant.conf somewhere on the card. Removed password from /etc/shadow to give me root login.
I boot the u-boot.bin via putusb, then
mmc dev 1; ext2load mmc 1 0x408000 uImage; set bootargs "mem=448M@0M console=ttyS0,115200n8 root=/dev/mmcblk1p1"; bootm
Logged in, set password to 1, start “wpa_supplicant -Dnl80211 -iwlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf &”, then dhclient eth0. Installed openssh-server and switched to that (because the serial console sometimes stops to function).
Installed gdisk and repartitioned from scratch /dev/mmcblk0, creating two partitions there (one for /boot, 32M should be enough), another for LVM pv. Created LVM there, with two (for now) volumes: 1G for swap, and everything else for the rootfs. mkfs.nilfs /dev/emmc-lvm/rootfs. Mounted it, and started to Debootstrap debian armhf according to the official manual (you'll need to read both installing debian and armhf chroot).
Copied /lib/firmware/rt2870.bin to the newly established system, configured /etc/network/interfaces to bring up wlan0 for my home wlan automatically. Created a symlink from /bin/true to /usr/sbin/mkfs.nilfs2 to make the boot happy.
Initramfs is a bit tricky: a workaround from http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=649288 is needed (it has a typo where .. is used instead of . and also the script should be made +x), and also i had to add lvm vgchange -aly –ignorelockingfailure to the end of /usr/share/initramfs-tools/scripts/local-top/lvm2. Add nilfs2 to /etc/initramfs-tools/modules. Make a symlink from initrd-3.0.8 to ``initramfs'' in /boot.
The resulting system should be bootable with
mmc dev 0; ext2load mmc 0 0x408000 uImage; ext2load mmc 0 0x1408000 initramfs; set bootargs "mem=448M@0M console=ttyS0,115200n8 root=/dev/emmc-lvm/rootfs initrd=0x1408000,0x${filesize}"; bootm 0x408000
You can hardcode this command line by adding
#define CONFIG_BOOTCOMMAND \
"mmc dev 0; ext2load mmc 0 0x408000 uImage; ext2load mmc 0 0x1408000 initramfs; set bootargs \"mem=448M@0M console=ttyS0,115200n8 root=/dev/emmc-lvm/rootfs initrd=0x1408000,0x${filesize}\"; bootm 0x408000"
to include/configs/paz00.h and recompiling u-boot.
If you want to flash uboot as your main bootloader, get the dump of your part2 (DCT) with putusb, use bct_dump to dump the current config to file, add
BootLoader = u-boot.bin,0x00108000,0x00108000,Complete;
in there and create a new image with cbootimage. Then either flash it with putusb or from a running system by “echo 0 > /sys/block/mmcblk0boot0/force_ro; dd if=newdct.bin of=/dev/mmcblk0boot0”.
