u-boot-2009.11移植(适用于TQ2440和MINI2440)第七篇:引导内核启动
来源:互联网 发布:js div classname 编辑:程序博客网 时间:2024/06/03 21:48
(1)修改机器码
要保证uboot与linux内核的机器码一致,这样才能启动内核。
在之前board/sunzl/sunzl2440/sunzl2440.c中我们定义了
#if defined(CONFIG_S3C2440)
/* arch number of S3C2440-Board*/
gd->bd->bi_arch_number= MACH_TYPE_S3C2440 ;
#endif
即我们的uboot移植是以uboot自带的S3C2440开发板为模板的,所以我们还是按照S3C2440的机器码来移植,MACH_TYPE_S3C2440的具体数值在include/asm/mach-types.h文件中已有定义:
#define MACH_TYPE_S3C2440 362
这个机器码应该和在内核中的arch/arm/tools/mach-types文件下的机器码一致。
s3c2440 MACH_S3C2440 S3C2440 362
本次移植机器码是一致的,所以不用修改。
(2) 修改bootcmd和bootargs参数
其中bootcmd是为了引导内核,而bootargs是为了在加载根文件系统时,给根文件系统传递必要的参数。可以有两种方法来设置这两个参数:
第一种方法是在uboot的提示符下直接设置bootcmd和bootargs这两个参数:
sunzl2440 # setenv bootcmd ' nand read 31000000 100000 400000; bootm 31000000 '
sunzl2440 # setenv bootargs ' root=/dev/mtdblock3 rw noinitrd init=/linuxrc console=ttySAC0, 115200 rootfstype=cramfs mem=64M'
sunzl2440 # saveenv
如果要挂载jffs2或者yaffs2文件系统,将 rootfstype=cramfs改为rootfstype=jffs2或者yaffs2
在这里bootcmd的含义是从nandflash中读取kernel,内核分区100000 到500000,此时的100000为起始地址,400000为偏移地址,然后利用命令bootm启动。
bootargs的含义详细如下:
mtdblock3代表第4个flash分区,用来存放根文件系统rootfs;
rw代表文件系统可读可写;
console=ttySAC0,115200使kernel启动期间的信息全部输出到串口0上,波特率为115200;
mem=64M表示内存是64M,如果是32则设为32M
rootfstype=cramfs代表文件系统的格式为cramfs。如果没有这句,系统启动时即使分区挂载正确了,但是文件系统的类型有可能出错。在这里定义过,就不会出错了。这里的选项也和根文件系统的配置有关。(我先使用cramfs做根文件系统,以后再换JFFS2或是YAFFS)
最后还要应用saveenv命令来保存这两个变量。这时,如果你在提示符下敲入printenv命令,则会看到uboot的环境参数多了两项,如:
bootargs=root=/dev/mtdblock3 rw noinitrd init=/linuxrc console=ttySAC0,115200 rootfstype=cramfs mem=64M
bootcmd=nand read 31000000 100000 400000; bootm 31000000
第二种方法是在include/configs/sunzl2440.h内修改CONFIG_BOOTARGS和CONFIG_BOOTCOMMAND这两个宏定义:
#defineCONFIG_BOOTDELAY 3
//#defineCONFIG_BOOTARGS "console=ttySAC0root=/dev/nfs " \
"nfsroot=192.168.0.1:/friendly-arm/rootfs_netserv" \
"ip=192.168.0.69:192.168.0.1:192.168.0.1:255.255.255.0:debian:eth0:off"
#defineCONFIG_BOOTARGS " root=/dev/mtdblock3 rw noinitrd init=/linuxrc console=ttySAC0 ,115200 rootfstype=cramfs mem=64M"
/*特别注意console=ttySAC0 ,115200这一命令中,ttySAC0,115200之间不要有空格,否则文件系统挂载后波特率不匹配会打印乱码,切记!!!!!!!!*/
#defineCONFIG_ETHADDR 08:00:3e:26:0a:5b
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.0.69
#defineCONFIG_SERVERIP 192.168.0.1
/*#defineCONFIG_BOOTFILE "elinos-lart" */
//#defineCONFIG_BOOTCOMMAND "dhcp;bootm"
#define CONFIG_BOOTCOMMAND " nand read 31000000 100000 400000 ; bootm 31000000"
#ifdefined(CONFIG_CMD_KGDB)
#defineCONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
(3)重新编译并测试
make distclean
make sunzl2440_config
Configuring for sunzl2440board...
make
编译完成后烧到板子上,重启出现如下界面:
U-Boot 2009.11 (Oct 07 2015 - 15:09:27)
sunzl
Love Linuxforever!!
DRAM: 64 MB
Flash: 2 MB
NAND: 256 MiB
*** Warning - bad CRC or NAND, using defaultenvironment
In: serial
Out: serial
Err: serial
Net: dm9000
Hit any key to stop autoboot: 0
[ u-boot@sunzl ]#
- u-boot-2009.11移植(适用于TQ2440和MINI2440)第七篇:引导内核启动
- u-boot-2009.11移植(适用于TQ2440和MINI2440)第二篇:探索启动代码
- u-boot-2009.11移植(适用于TQ2440和MINI2440)第三篇:修改初始化代码
- u-boot-2009.11移植(适用于TQ2440和MINI2440)第五篇:修改配置文件
- u-boot-2009.11移植(适用于TQ2440和MINI2440)第四篇:完善目标板外设驱动(Nor flash)
- u-boot-2009.11移植(适用于TQ2440和MINI2440)第六篇:添加Yaffs(2)镜像烧写功能
- u-boot-2009.11移植(适用于TQ2440和MINI2440)第一篇:建立开发板文件,测试编译环境
- u-boot-2009.11移植(适用于TQ2440和MINI2440)第四篇:完善目标板外设驱动(Nand flash和Dm9000配置)
- u-boot-2011.03在mini2440/micro2440上的移植(四)——支持内核启动
- U-boot-2014.04移植到MINI2440(9) nor flash启动和nand flash 启动
- u-boot-2009.08在mini2440上的移植 增加引导内核功能
- u-boot移植(Mini2440)
- 【嵌入式Linux学习七步曲之第三篇 Linux系统bootlaoder移植】U-BOOT全线移植分析系列之四--U-boot如何引导Linux内核启动?
- U-Boot启动引导内核分析(一)
- U-Boot启动引导内核分析(二)
- U-Boot启动引导内核分析(三)
- U-boot如何引导Linux内核启动
- U-boot如何引导Linux内核启动
- 插入排序
- jQuery 下拉框常用用法
- 学会承担,而不是抱怨
- 转载 勿喷
- asp.net mvc Model验证中MetadataType的应用
- u-boot-2009.11移植(适用于TQ2440和MINI2440)第七篇:引导内核启动
- 吉他图片
- 百度地图入门知识
- Android平台架构及特性
- 欢迎使用CSDN-markdown编辑器
- leetcode 034 Search for a Range
- 获取SD卡的剩余容量
- JS 循环遍历JSON数据
- Android问题收集——实际项目中遇到的问题及解决方案