【原创分享】嵌入式linux应用之U-BOOT移植定制篇--20130822

虽然这样的教程网上非常之多,之前我也去参考了些,很多其实都不是很好用,不过tekkamanninja的源码非常好,这里也是参考其源码,不做深层修改,因为基本修改好了。只讲讲一些要注意的技巧,希望有些遇到困难了的朋友能尽快解决问题。

平台:

ubuntu13.04 配置好nfs,tftp

arm-linux-gcc 4.4.3

uboot2010.03

mini2440 NAND128M SDRAM64M

一:为何选择uboot

友善之臂使用的vivi,对于初学者来说,vivi更实用,也安全,一切按部就班,功能相对少,最致命的就是不能支持网络。vivi在开发时需要动不动就dnw,对于内核开发的来说比较麻烦,比如nfs 内核启动。所以选择UBOOT显然好多了。

二:获取Uboot

友善的mini2440资源dvd里有1.1.6,相对比较老,所以我们使用tekkamanninja的源码,2010.03这个。他基本上要修改的地方都修改了。站在巨人的肩膀上就是好啊~~

三:需要修改的部分

虽然他的源码该修改的都修改了,但是要做一个适合自己的,还是要定制一点点地方。

首先,注意一点,mini2440的nor flash上跑的是super vivi这一点要保证

下面我们就开始定制下

先说下内核部分有个地方

在mini2440的linux内核代码中,flash的分区表在文件mach-mini2440.c中,

static struct mtd_partition mini2440_default_nand_part[] = {
[0] = {
.name = "supervivi", //supervivi的位置,当uboot的空间小于
.size = 0x00040000, //0x40000时一样的刚好放
.offset = 0, //mtdblock0

},
[1] = {
.name = "param", //supervivi 的参数,同样这里我们放uboot的
.offset = 0x00040000, //环境变量 接着UBOOT的空间
.size = 0x00020000, //大小 对应/dev/mtdblock1
},

[2] = {
.name = "Kernel", //内核存放的地址了
.offset = 0x00060000, //
.size = 0x00500000, //大小 对应 /dev/mtdblock2
},
[3] = {
.name = "root", //文件系统
.offset = 0x00560000,
.size = 1024 * 1024 * 1024, // 对应 /dev/mtdblock3
},
}

从上面可以看出,对于VIVI 也是同样,比如用NOR vivi 擦除nand后,在下载vivi到nand。这是这时烧入的地址范围就是0x0~0x40000这个空间,同样烧入内核时就是0x60000--0x560000之间,不能超越,否则引导时肯定出错无法进入系统。

所以我们在编译UBOOT时要注意改

u-boot-2010.03-tekkamanmaster/include/configs下面的mini2440.h

#define CONFIG_ENV_OFFSET 0x60000 修改为

#define CONFIG_ENV_OFFSET 0x40000 但要确保你的uboot大小不要超过ox40000

这样env环境变量全部放于0x40000到0x60000之间,保证NOR 里面的vivi烧写内核,烧写文件系统时能对于各个block。这样做就是为了兼容。

四:定制

按照上面改动一点点就可以使用了,但是,我们目标是要定制,显然,还有些要改动

1,环境变量

虽然意义不大,因为一切可以去uboot里面改保存后就好了,但是为了一劳永逸改动后,下次烧写时就不用又设置保存了,比如VIVI把nand給format了(虽然可以把env存eeprom里,但还是不麻烦了)。

去mini2440.h里面

#define CONFIG_BOOTDELAY 1
#define CONFIG_BOOTARGS "noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200"
#define CONFIG_ETHADDR 08:08:11:18:12:27
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.1.70
#define CONFIG_SERVERIP 192.168.1.252
#define CONFIG_GATEWAYIP 192.168.1.1
#define CONFIG_OVERWRITE_ETHADDR_ONCE

#define CONFIG_BOOTCOMMAND "nboot 30008000 0 0x60000;bootm"

设置自己需要的信息,上面设置的是按照vivi分区方式启动开发板,进入yaff2文件系统,如果要nfs启动的话

bootcmd=nfs 0x30008000 192.168.1.252:/root/rootfs_qtopia_qt4/core/zImage.img; bootm

上面是NFS 内核,所以要配置好自己的NFS服务。

bootargs=noinitrd root=/dev/nfs rw nfsroot=192.168.1.252:/root/rootfs_qtopia_qt4

ip=192.168.1.70:192.168.1.1:255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M
上面是NFS文件系统。
以上修改成自己需要的环境变量即可,包括NFS目录啊,IP之类的。。这样,烧入UBOOT后就是自己想要的Uboot了
2,个性定制
如下图,

打印信息里做自己的广告~~,这个仅仅是娱乐哈,请珍惜原创的劳动成果~~
哪里修改呢,
有对uboot启动流程了解的话,你会发现,uboot的第二个阶段入口,会执行start_armboot函数,在lib_arm的board.c中,
在打印信息的时候 加入
printf ("lynnlase@163.com\n");
printf ("QQ:1097057683\n");
然后启动时就会出现你想要的了,哈哈,纯属娱乐下。
五:编译
源码根目录下
make distclean
make mini2440_config
make
生成U-boot.bin
六:烧入NAND
第一次的话必须要用usb来烧写,用NOR里的vivi
format nand
v 烧入vivi(实际用dnw时烧入uboot)
关闭电源
拨开关到NAND启动位置
打开电源
七:测试
启动uboot后,如果是我之前启动开发板的内核以及文件系统的话,这时会直接出现命令输入提示符这里。
因为开发板还没有内核,没有文件系统
利用我们之前配置好的TFTP服务以及对应的uboot环境变量。printenv查看下当前环境变量

服务器ip,本机IP都已经设定好了。从服务器tftp内核出来

这里要插一下了。这个内核不是我们之前使用的内核了,因为uboot只支持uimage的内核,需要转换下

mkimage-n'lynn'-A arm -O linux -T kernel -Cnone-a 0x30008000 -e 0x30008040 -d zImage zImage.img

其中注意下入口地址。。这样转换后的zimage.img才是我们要tftp的。。。。至于mkimage ubuntu请使用sudo apt-get install u-boot-tools安装。(当你直接mkimage回车,也会提示你安装)
tftp内核


烧入内核对于地址,前面分区定义的 0x60000开始
输入命令
nand write 0x30008000 0x60000 0x300000 即可 这样,内核即从内存中拷贝到NAND中当执行boot时则进入内核。
至于文件系统,简单的方法就是直接用VIVI烧入吧。
这样整个uboot就移植定制完成。
这里有个小技巧,就是,修改了uboot要重新烧入时,不再需要vivi了,直接tftp到内存,直接修改0-0x40000就好了。很方便。

备注1:需要修改makefile  CROSS_COMPILE =  arm-none-linux-gnueabi- 
       2:tftp zImage.img 下载到内存中,然后nand erase 0x60000 0x500000  nand write 0x30008000 0x60000 0x230000(实际大小) bootm 即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值