首先向大牛liukun321致敬,这篇文章是基于他的uboot for tiny210 ver3.1http://blog.csdn.net/liukun321/article/details/7438880
其次声明,此文章针对的是初学者,大牛请绕道~~~
想必初玩友善之臂tiny210的童鞋一定对自带的superboot感到无语吧,我刚拿到板子的时候就有这感觉,玩惯了Uboot的普罗大众,估计没有几个对他这个superboot感冒吧,也不清楚友善设计这个的初衷到底是什么,不过闲来逛友善论坛时,倒是发现有个版主解释说,是为了方便初学者使用,因为有的初学者连个USB驱动都不会安装,
汗一个先,难道友善这个板子是专门为开发android上层应用者开发的?对于做驱动开发和内核研究的童鞋来说,用SDCARD烧录这种笨拙的做法来测试内核,简直是不可接受的吧!好了,有点跑题了,为了让初学者少走弯路,简单介绍下使用uboot for tiny210 ver3.1来替换superboot的最快捷的方法:
- 用友善光盘中介绍的方法将superboot,zImage和android.img都烧好,让板子先跑起来。
- 然后编译uboot for tiny210 ver 3.1生成tiny210-uboot.bin,制作好启动sdcard。
- 设置板上的启动选项从sdcard启动,进入友善之腿FriendlyLEG,设置uboot网络参数,注意:该版本的uboot在设置ethaddr时,第一个字节的bit0必须设置成1,否则会报错,不知道算不算是小小的bug之一:
#setenv ethaddr01:23:45:67:89:ab
#setenv ipaddr 192.168.2.100
#setenv serverip 192.168.2.10
#setenv gatewayip 192.168.2.1
#saveenv
- 将uboot烧写到nand flash:首先在服务器上设置好tftp服务器,并设置好ip,测试通过后,将tiny210-uboot.bin放置于tftpboot:
#tftp 21000000 tiny210-uboot.bin
下载成功后,uboot会显示总共下载了多少字节,假设xxxx(hex)bytes,假设你不是很了解s5pv210的地址分区,根据uboot本身的大小来作为擦写和写入长度算是比较保险的方法
#nand erase 0 xxxx
#nand write 21000000 0 xxxx
设置板上的启动选择开关为nand启动,就可以看到从nand也可以进入FriendlyLEG了,至此,uboot已经成功的偷梁换柱了~~后面的设置应该就比较熟悉了~
- 按以下方法修改内核以适应uboot,详参见liukun321的文章http://blog.csdn.net/liukun321/article/details/7383669,忽略此步骤将会出现加载kernel时卡死在Uncompressing Linux... done, booting the kernel....
修改内核源码的
arch/arm/mach-s5pv210/include/mach/memory.h 文件 26,27 行内容,将 Maximum of 256MiB in one bank 的限制改为 Maximum of 512MiB in one bank 作如下修改:#defineSECTION_SIZE_BITS 29
#defineNODE_MEM_SIZE_BITS 29
- zImage转uImage:由于uboot只支持uImage格式的镜像文件,需要使用uboot for tiny210 ver3.1源码下面的tools里面的mkimage工具将内核编译生成的zImage转换成相应的uImage~
- 设置uboot从tftp加载kernel:
#setenv bootcmd "tftp 21000000 uImage;bootm 21000000"
#saveenv
- 设置挂载android的命令行,参照光盘里面的ini文件即可:
#setenv bootargs root=/dev/mtdblock4 console=ttySAC0,115200 init=/linuxrc androidboot.console=s3c2410_serial0
至此,整个环境搭建完毕,尽情享受uboot和tftp在调试kernel的时候带来的便捷吧~~~~
setenv bootargs 'root=/dev/nfs rw nfsroot=192.168.1.56:/210 ip=192.168.1.210:::::eth0:off init=/linuxrc console=ttySAC0,115200'
cd /dev
mknod -m 660 console c 5 1
mknod -m 660 null c 1 3
PS:解决u-boot for tiny210 在启动友善提供的mini210 linux内核/android出现卡死在Uncompressing Linux... done, booting the kernel.
1.由于友善提供的内核时mini210的,第一步先修改u-boot for tiny210的机器码,使之与内核机器码匹配。
修改include/configs/tiny210.h
#define MACH_TYPE_TINY210 3466
2.友善提供的是mini210的内核,根据内核和mini210 uboot里的配置(我手里没有mini210开发板),可以知道mini210的DDR2ram
和tiny210DDR2ram在bank的挂载方式是不同的,详见我的http://blog.csdn.net/liukun321/article/details/7270426 ,故需要修改内核
源码的arch/arm/mach-s5pv210/include/mach/memory.h文件26,27行内容,将Maximum of 256MiB in one bank的限制改为Maximum
of 512MiB in one bank 作如下修改:
#define SECTION_SIZE_BITS 29
#define NODE_MEM_SIZE_BITS 29通过上述两步修改u-boot for tiny210即可成功引导linux/android.
$make ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- tiny210_config
$sudo dd iflag=dsync oflag=dsync if=tiny210-uboot.bin of=/dev/sdb seek=1
cp mini210_linux_defconfig .config
注意mac 地址