tiny210 + uboot + nfs + android

来源:互联网 发布:深海鱼油 知乎 编辑:程序博客网 时间:2024/05/18 23:52

经过两天的努力,在参考无数网络文章后,终于在tiny210开发板上用uboot+nfs的方式让Android系统跑了起来。


目前实现的功能包含但不限于以下内容:

1. 制作SD启动卡

2. uboot支持DM9000

3. uboot支持usb dnw功能

4. uboot为2011.12版本

5. linux支持512M内存

6. 可以从NFS上加载rootfs

7. tiny210+uboot+nfs成功启动android.


一、制作SD启动卡

两条命令即可:

$dd iflag=dsync oflag=dsync if=out/spl/tiny210-spl.bin of=/dev/sdc  seek=1

$dd iflag=dsync oflag=dsync if=out/u-boot.bin of=/dev/sdc  seek=49

其中tiny210-spl.bin是由如下命令生成的(uboot编译过程中抓取)

/work/tiny210/u-boot-2011.12-tiny210/board/samsung/tiny210/tools/mktiny210spl.exe \
/work/tiny210/u-boot-2011.12-tiny210/out/spl/u-boot-spl.bin /work/tiny210/u-boot-2011.12-tiny210/out/spl/tiny210-spl.bin


而mktiny210spl.exe是由mkv210_image.c编译而来

而seek=49,这个数字49是由mkv210_image.c的IMG_SIZE有关系。


二、支持512M内存

这部分修改仅涉及linux, 在arch\arm\mach-s5pv210\include\mach\memory.h文件中

#define SECTION_SIZE_BITS28  
#define NODE_MEM_SIZE_BITS 28

改为

#define SECTION_SIZE_BITS29
#define NODE_MEM_SIZE_BITS 29

再重新编译linux即可,否则uboot加载linux后,跳至linux却无法启动。


三、添加usb dnw功能

这个功能的代码主要沿用了s3c64xx的usbd-otg-hs.c/.h文件,改动不多,可在最初调试过程中,却花了很长的时间

最后发现是usb clk的问题,如下方法解决

在s3c_usbctl_init()函数内加入OTHERS_REG |= (1<<16);

int s3c_usbctl_init(void)
{

OTHERS_REG |= (1<<16);//这是210与6410最大的区别

     ...

}

再增加一个cmd_dnw.c文件,并添加U_BOOT_CMD。


四、让linux支持NFS

我最初没加这个功能,一直用NFS启动不了。  后来才发现是内核不支持NFS。

只要在linux配置中加入NFS ROOT相关即可。

我打开了如下功能:

# CONFIG_UFS_FS is not set
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
# CONFIG_NFS_V4 is not set
CONFIG_ROOT_NFS=y
# CONFIG_NFSD is not set


五、设置uboot启动参数与命令

1. PC上执行 $/mkimage -n "Kernel 2.6.35" -A arm -O linux -T kernel -C none -a 20A07fc0 -e 20A08000 -d zImage uzImage  用来制作uimage

2. 开发板上执行
$setenv bootargs root=/dev/nfs console=ttySAC0,115200 init=/linuxrc nfsroot=172.16.101.132:/work/tiny210/android-2.3.1-tiny210/rootfs_dir ip=192.168.170.40:172.16.101.132:192.168.170.200:255.255.255.0:tiny210:eth0:off fbcon=rotate:1

$setenv bootcmd 'dnw 0x20A07fc0;bootm 0x20a07fc0'

$saveenv

最后执行boot,   根据提示在PC上执行$dnw  uzImage, 内核将被下载到开发板的内存中(0x20A07fc0),  系统再自动执行bootm指令,启动linux,

linux内核在完成初始化之后,将以172.16.101.132:/work/tiny210/android-2.3.1-tiny210/rootfs_dir 为root fs启动android系统。