转自:《http://blog.sina.com.cn/s/blog_726c4bd20100unjn.html》
移植烧写步骤
1. 解压u-boot源文件
2. 从u-boot/include/configs里找相近的配置,复制成自已的名字
3. 改makefile文件增加目标,比如 mini2440_config: arm<体系>
4. 把相应文件改好
5. make distclean 清除垃圾(把上一级的配置全部删除)
6. 启动你改好的配置 make mini2440_config
7. 交叉编译 make CROSS_COMPILE=arm-linux-
8. 在uboot/下生成了uboot.bin
9. 传输数据到内存
9.1 烧写机<工厂级,Nand中的bootload已被破坏>
9.2 USB+驱动
9.3 串口 输入
9.4 网络 输入
(注:数据传输指令后可以跟数据输入的内存目标地址, 默认是bootloader的mini2440.h里CONFIG_SYS_LOAD_ADDR指定的值)
10. 烧写进Nand
10.1 先擦除nand erase offset<Nand基址(起始地址)> len<数据长度>
10.2 写入nand write.jffs2 addr<内存基址> offset<Nand基址> len<数据长度>
10.3 根文件系统rootfs定入要用yaffs文件系统写入
u-boot命令
u-boot新版本下载地址,
ftp://ftp.denx.de/pub/u-boot
http://sourceforge.net/projects/U-Boot/
= 0.常用命令
- 内存操作-
md 是显示内存信息,默认是以32位显示md.l
md.b 以2位显示
md.w 以4位
mm 修改内存的值 也可以.b .w .l
空格+回车 结束修改
mw内存填充
数据复制cp
cp[.b .w
例:
- Flash操作 -
查看FLASH型号的扇区
flinfo
第一行显示Bank所在的号码,容量bit
大小Size和扇区Sectors大小
按扇区块写保护FLASH,一定要按整扇区块,如果不是整扇区块,则失败
protect off all 关闭所有扇区写保护
protect on all
protect off start end <start和end为起始地址和结束地址>
protect on start end
例: protect on 0 1FFFF
擦除FLASH,
erase start end
例 erase 30000 1EFFFF
- Nand Flash命令-
nand info
nand erase
nand read[.jffs2] addr off size
nand read.yaffs addr off size
nand write[.jffs2] addr off size
nand write.yaffs addr off size
nand dump offset
- 设置环境变量 -
printenv
setenv val item
setenv val
saveenv
bootdelay是开机延时的时间变量
从NAND启动参数
setenv bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0
setenv bootcmd "nand read 0x30000000 0x60000 0x2300000; bootm 0x30000000" <设置kernel的起始地址>
设置YAFFS启动,引导参数:
setenv bootargs noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0
设置NFS启动,引导参数:
setenv bootargs console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.201:/home/root/root_fs/fs_mini ip=192.168.1.227:192.168.1.201:192.168.1.201:255.255.255.0:sbc2440.arm9.net:eth0:off
- 启动命令 -
go 执行内存中的二进制代码<不带头的程序,比如 zImage>
go addr[arg...]
bootm 执行内存中的二进制代码<有固定格式的头,比如系统,格式,压缩,等头信息等,如uImage>
bootm[addr[arg...]]
如果addr省略,则存放到配置文件中定义的宏CFG_LOAD_ADDR
nboot 执行NandFlash中的代码
nboot[[[addr]dev]offset]从dev偏移offset处的映像复制到内存的addr处,如果环境变量autostart的值是yes,就启动这个映像
如果addr省略,则存放到配置文件中定义的宏CFG_LOAD_ADDR
如果dev省略,则取环境变量bootdevice的值
如果offset省略,默认为0
bootp 从网络中启动
= 2. 下载文件到开发板
下载固件有3种模式(串口,USB,网络)
- USB下载 -
usbslave
nand erase 0x100000 0x300000
nand write 0x30000000 0x100000 0x300000
usbslave
nand erase 0x560000 0x305700
nand write.yaffs 0x30000000 0x560000 0x305700 0
<yaffs大小必须是528的倍数,所以0x305700必须要改大成是528的倍数>
- 串口下载 -
在超级终端下
loadb
loady
loadz
loadx 0x32000000
然后点发送文件
- 网络通过tftp来下载
主机先 打开TFTP Server软件,将u-boot.bin拷贝至C:\Program Files\TftpdWin\
setenv ethaddr 12:34:56:78:xx:xx //开发板MAC地址
setenv ipaddr 192.168.0.x
setenv serverip 192.168.0.x
下载指令tftp 0x32000000 uImage
= 3. 烧入FLASH
假设FLASH地址分段
bootloader
parameter
kernel
(空)
rootfs
- 烧U-BOOT - nand命令后面的地址 有0x和没有,都认为是16进制
下载u-boot.bin至Nand Flash 地址0x0处
1)借助DNW
跳线从Nor Flash启动,进入SuperViVi菜单界面,输入“n”,借助DNW,通过USB下载刚编译生成的u-boot.bin;
2)更新自已
SMDK2440A>tftp 0x30000000 u-boot.bin
SMDK2440A>nand erase 0x0 0x40000
SMDK2440A>nand write.jffs2 30000000 0 0x40000 //烧写u-boot.bin至0x0 开始的Nand Flash
- 烧kernel-
先从zImage转到uImage
mkimage -n 'linux-2.6.14' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d zImage zImage.img
Image Name:
Created:
Image Type:
Data Size:
Load Address: 0x30008000
Entry Point:
SMDK2440A>tftp 0x32000000 uImage
SMDK2440A>nand erase 0x50000 0x200000
SMDK2440A>nand write.jffs2 0x32000000 0x50000 0x200000 //烧写uImage至0x30000
想开发板上电后自动启动kernel则要设置bootcmd环境变量
set bootcmd 'nand read 32000000 50000 2000000; bootm 32000000'
saveenv
- 烧rootfs-
SMDK2440A>tftp 0x30000000 root_qtopia.img// 通过tftp server下载root_qtopia.img至开发板内存0x30000000 地址处
SMDK2440A>nand erase 0x270000 $(filesize) //首先擦除Nand Flash从0x270000 开始,大小为$(filesize)
(可用echo $(filesize)来查看root_qtopia.img的大小),来存放root_qtopia.img
SMDK2440A>nand write.yaffs 30000000 270000 $(filesize) //烧写root_qtopia.img至0x270000 开始的Nand Flash
SMDK2440A>boot
注明: $(filesize) 为系统环境变量, 可以用printenv查看, 调用tftp后,系统自动会更新$(filesize) 的值,
直接调用即可,不必查看后再输入
kernel烧写步骤
1. 从内核源文件kernel/arch/arm/configs/里找一个config样本
2. 把样本复制到kernel/目录复制成 .config
3. make distclean清除垃圾
4. make menuconfig 打开配置介面
5. 修改配置 , 最后选save保存配置
6. make zImage CROSS_COMPILE=arm-linux-
7. 把生成的/arch/arm/boot/zImage 放到当初u-boot源代码中/tools里去,
8. 用nand启动u-boot
9. 用DNW软件用usbslave用USB传输uImage到内存中
10. bootm 地址 , 从内存中启动内核,验证内核是否正常<启动了kernel,不能再回到u-boot>
===========
11. nand erase 60000<nand偏移量> 400000<大小>
12.
=============
2.X86平台