注意:
内核启动前,uboot可以做一些硬件初始化的工作,如初始化串口。
同时uboot支持不同的机器ID,uboot启动时要注意设备ID 是多少,不同的设备ID,内核会进行不同的初始化操作,所以要确定好uboot的设备ID 以及内核支持的设备ID。
一、环境参数设置
(1)Uboot可以配置一些环境变量,
Uboot执行的时候:
1读参数
2判断是否有效
3无效则用默认写死的值
(2)搜索下using default environment
查看默认的配置default_environment:
Nand存储规划
因此在Smdk2440.h (include\configs) 中加入一些环境变量的定义:
倒数计时时间
IP等信息
网卡MAC:
因此定义头的内容:
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.1.17
#define CONFIG_SERVERIP 192.168.1.111
#define CONFIG_ETHADDR 00:0c:29:4d:e4:f5
二、裁剪改小:
(3)修改配置文件 smdk2440.h进行裁剪
编译出错:
3
三、save命令环境设置
(4)save命令
下载一个移植好的内核 看一下分区
内核打印出来的分区信息
0x00000000-0x00040000 :"bootloader"
0x00040000-0x00060000 : "params"
0x00060000-0x00260000 : "kernel"
0x00260000-0x10000000 : "root"
一直不敢用save 怕他破坏flash内容。因为save到哪里和配置有关。
smdk2440.h对于save的配置如下:
看看common里这个文件依赖于那个宏
所以定义这个宏
但是存在nandflash哪里呢 去env_nand看看
存在哪里 :0x00040000-0x00060000 :"params"
大小呢:
擦除的大小:
#define CONFIG_ENV_IS_IN_NAND
#define CONFIG_ENV_OFFSET 0x00040000
#define CONFIG_ENV_SIZE 0x20000
#define CONFIG_ENV_RANGE CONFIG_ENV_SIZE
拿过去编译:
为什么还是有警告 没有sava
基本上到这 已经完整
四、uboot分区设置
(5)下载一个内核的过程
很麻烦,设置分区功能
Uboot的分区只是为了下载方便的作用,不想输入数值,根据内核来划分,不会影响内核
需要定义这个宏:
参考:
更新编译
、
需要定义这个宏
重新编译:
nanderase 60000 200000
nandwrite 30000000 60000 200000
tftp30000000 uImage
nanderase.part kernel
nandwrite 30000000 kernel
需要手工设置
代码里运行命令
使用分区,从kernal分区读内核。
启动成功
五、uboot文件系统烧写支持(jffs2、yaffs2)
(7)烧写JFFS2
tftp30000000 fs_mini_mdev.jffs2
nanderase.part rootfs
nandwrite.jffs2 30000000 0x00260000 5b89a8
setbootargs console=ttySAC0 root=/dev/mtdblock3 rootfstype=jffs2.
(8)烧写YAFFS
tftp30000000 fs_mini_mdev.yaffs2
nanderase.part rootfs
nandwrite.yaffs 30000000 260000 889bc0
搜索.yaffs
#defineCONFIG_CMD_NAND_YAFFS
重新编译
更新UBOOT:
tftp30000000 u-boot_new.bin; protect off all; erase 0 3ffff; cp.b 30000000 0 40000
Reset
下载的很快,可能有问题 :
尝试启动
打开文件系统对比:
如果下载的是yffs 调用这个函数烧写:
修改已经两处:
编译烧写
tftp30000000 u-boot.bin; protect off all; erase 0 3ffff; cp.b 30000000 0 40000
(8)漏洞:
uboot还需要修改:
到此完成了一个支持S3C2440功能够用的uboot。
最终源码下载地址:
http://download.csdn.net/detail/fengyuwuzu0519/9827311