linux 升级烧写命令,《转》u-boot移植烧写步骤、u-boot命令和kernel烧写步骤

转自:《http://blog.sina.com.cn/s/blog_726c4bd20100unjn.html》

移植烧写步骤

1. 解压u-boot源文件

2. 从u-boot/include/configs里找相近的配置,复制成自已的名字

3. 改makefile文件增加目标,比如 mini2440_config: arm  核心s3c24x0

4. 把相应文件改好

例如: 硬件配置在 u-boot/include/configs/mini2440.h

相关指令的 u-boot/common/cmd_console.c

相关驱动的文件,都放到相应目录里去

5. make distclean 清除垃圾(把上一级的配置全部删除)

6. 启动你改好的配置 make mini2440_config

7. 交叉编译 make CROSS_COMPILE=arm-linux-

8. 在uboot/下生成了uboot.bin

9. 传输数据到内存

9.1 烧写机

9.2 USB+驱动  输入指令usbslave ,然后给计算机制定文件

9.3 串口 输入      指令loadx ,然后给计算机制定文件

9.4 网络 输入      指令tftp

(注:数据传输指令后可以跟数据输入的内存目标地址, 默认是bootloader的mini2440.h里CONFIG_SYS_LOAD_ADDR指定的值)

10. 烧写进Nand

10.1 先擦除nand erase offsetlen

10.2 写入nand write.jffs2 addr offsetlen

10.3 根文件系统rootfs定入要用yaffs文件系统写入

nand wrtie.yaffs addr offset len

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  .l]src_add dest_add len

例:  cp.b 31000000 50000 D0000  从31000000复制到50000 长度D0000

- Flash操作 -

查看FLASH型号的扇区

flinfo

第一行显示Bank所在的号码,容量bit

大小Size和扇区Sectors大小

按扇区块写保护FLASH,一定要按整扇区块,如果不是整扇区块,则失败

protect off all 关闭所有扇区写保护

protect on all  打开所有

protect off start end

protect on start end

例: protect on 0 1FFFF

擦除FLASH,  Nor Flash无法写入1,所以需要用erase擦除来写入1

erase start end

例 erase 30000 1EFFFF

- Nand Flash命令-

nand info

nand erase

nand read[.jffs2] addr off size              .jffs代表ECC方式不同

nand read.yaffs addr off size

nand write[.jffs2] addr off size     .jffs代表ECC方式不同

nand write.yaffs addr off size

nand dump offset   打印offset开始的一个扇区的数据

- 设置环境变量 -

printenv      显示所有环境变量

setenv val item    添加/修改val变量,值为item

setenv val          把val的值清空了, 等效删除val

saveenv             把所有的env都保存至flash(关机后不会丢失)

bootdelay是开机延时的时间变量

从NAND启动参数

setenv bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0

setenv bootcmd "nand read 0x30000000 0x60000 0x2300000; bootm 0x30000000"

设置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 执行内存中的二进制代码

go addr[arg...]

bootm 执行内存中的二进制代码

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   从USB下载 rootfs

nand erase 0x560000 0x305700

nand write.yaffs 0x30000000 0x560000 0x305700 0

- 串口下载 -

在超级终端下

loadb

loady

loadz

loadx 0x32000000      loadb跟上地址

然后点发送文件

- 网络通过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     //本开发板IP地址

setenv serverip 192.168.0.x         //服务器IP地址

下载指令tftp 0x32000000 uImage   //下载uImage到内存0x3200000地址的地方3

= 3. 烧入FLASH

假设FLASH地址分段

bootloader      0x0  ~0x40000

parameter       0x40000  ~0x50000

kernel             0x50000  ~0x250000

(空)

rootfs             0x270000~

- 烧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   // 通过tftp server下载u-boot.bin至开发板内存0x30000000 地址处

SMDK2440A>nand erase 0x0 0x40000       //首先擦除Nand Flash从0x0 开始,大小为0x40000 ,来存放u-boot.bin

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:   linux-2.6.14

Created:      Fri Jan 12 17:14:50 2007

Image Type:   ARM Linux Kernel Image (uncompressed)

Data Size:    1262504 Bytes = 1232.91 kB = 1.20 MB

Load Address: 0x30008000

Entry Point:  0x30008000

-A ==> set architecture to 'arch'

-O ==> set operating system to 'os'

-T ==> set image type to 'type'

-C ==> set compression type 'comp'

-a ==> set load address to 'addr' (hex)

-e ==> set entry point to 'ep' (hex)

-n ==> set image name to 'name'

-d ==> use image data from 'datafile'

-x ==> set XIP (execute in place)

SMDK2440A>tftp 0x32000000 uImage       // 通过tftp server下载uImage至开发板内存0x32000000 地址处

SMDK2440A>nand erase 0x50000 0x200000      //首先擦除Nand Flash从0x50000 开始,大小为0x200000 的空间,来存放uImage

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

例:  指令 cp xxx_config .config

3. make distclean清除垃圾

4. make menuconfig 打开配置介面

5. 修改配置 , 最后选save保存配置

6. make zImage CROSS_COMPILE=arm-linux-

7. 把生成的/arch/arm/boot/zImage 放到当初u-boot源代码中/tools里去,

使用mkimage生成uImage

8. 用nand启动u-boot

9. 用DNW软件用usbslave用USB传输uImage到内存中

注意u-boot默认下载的地址

10. bootm 地址 , 从内存中启动内核,验证内核是否正常

===========

关机,开机,从nand启动u-boot重下载kernel

11. nand erase 60000400000  清除kernel区

nand write.jffs2 30000000 60000400000

12.

=============

2.X86平台  make bzImage

但要肥编好的zImage复制到/boot 并改名为vmlinuz-版本号

修改/boot/grub/grub.conf内容为当前内核版本

==== 驱动模块的编译, 和存放

编译内核时,编译选译M的模块, make modules

然后安装M模块, make modules_install

(安装实际是将编译好的*.ko代码,复制到/lib/modules//kernel/arch/x86/kernel/下)

<2.4内核,都叫*.o, 2.6之后的动态驱动都改成*.ko, 是由*.mod.o+*.o构成>

单个编译时,自已写个makefile,用make编译,然后自已复制到/lib/modules下面

对于ARM平台,因为系统的根目录还没有生成,所以*.ko将延后到rootfs根文件系统中存放

= ramdisk

X86需要 还需要把内核中M的模块,制作成ramdisk,

"用mkinitrd initrd-版本号 版本号目录名"

"版本号目录名"为刚刚安装的M模块/lib/modules下

命令类似mkinitrd initrd-2.6.32.2 2.6.32.2

mkinitrd initrd-2.6.18-8.el5xen 2.6.18-8.el5xen

也复制到/boot 并改名为initrd-版本号.img

修改/boot/grub/grub.conf内容为当前内核版本

====

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值