logo资料库

u-boot移植烧写步骤、u-boot命令和kernel烧写步骤 ).doc

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
移植烧写步骤 1. 解压 u-boot 源文件 2. 从 u-boot/include/configs 里找相近的配置,复制成自已的名字 3. 改 makefile 文件增加目标,比如 mini2440_config: arm<体系> <文 件夹名字> <公司/开发者,可以为 NULL> 核心 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- /* CROSS_COMPILE= 后面可以跟工具链名称, 也可以跟 路径的绝对地址 */ 8. 在 uboot/下生成了 uboot.bin 9. 传输数据到内存 9.1 烧写机<工厂级,Nand 中的 bootload 已被破坏> 9.2 USB+驱动 输入指令 usbslave ,然后给计算机制定文件 <如果 Nand 中的 bootloader 已被破坏, 又不是开发板, 则成砖头机> 9.3 串口 输入 指令 loadx ,然后给计算机制定文件 9.4 网络 输入 指令 tftp <遇先要在 u-boot 环境变量 里设定好服务器和本机的 IP 地址,MAC 地址,网关,MASK> (注:数据传输指令后可以跟数据输入的内存目标地址, 默认是 bootloader 的 mini2440.h 里 CONFIG_SYS_LOAD_ADDR 指定的值) 10. 烧写进 Nand 10.1 先擦除 nand erase offset len<数据长度> 10.2 写入 nand write.jffs2 addr<内存基址> offset len<数据长度> /* bootloader 和 kernel 用 jffs2 的 ECC 方式写入 , 不可用 yaffs 文件系统格式 */ 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 nand read.yaffs addr off size nand write[.jffs2] addr off size nand write.yaffs addr off size nand dump offset 打印 offset 开始的一个扇区的数据 .jffs 代表 ECC 方式不同 .jffs 代表 ECC 方式不同 - 设置环境变量 - printenv setenv val item setenv val saveenv 显示所有环境变量 添加/修改 val 变量,值为 item 把 val 的值清空了, 等效删除 val 把所有的 env 都保存至 flash(关机后不会丢失) bootdelay 是开机延时的时间变量 从 NAND 启动参数 setenv bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0 <设置 root 的存储 设备>
setenv bootcmd "nand read 0x30000000 0x60000 0x2300000; bootm 0x30000000" <设置 kernel 的起始地址> 设置 YAFFS 启动,引导参数: setenv bootargs noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0 设置 NFS 启动,引导参数: setenv bootargs 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 console=ttySAC0 root=/dev/nfs - 启动命令 - 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 下载 - <开发板常用/手机常用, 需要 USB 驱动> usbslave nand erase 0x100000 0x300000 起始地址 大小 nand write 0x30000000 0x100000 0x300000<目标地址必须是设置 kernel 的起始地址> 源地址 目标地址 大小 usbslave 从 USB 下载 rootfs nand erase 0x560000 0x305700 nand write.yaffs 0x30000000 0x560000 0x305700 0 - 串口下载 - <任何设备维修时用,万能,但速度慢,115.2Kbps>
在超级终端下 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 setenv serverip 192.168.0.x 下载指令 tftp 0x32000000 uImage //本开发板 IP 地址 //下载 uImage 到内存 0x3200000 地址的地方 3 //服务器 IP 地址 = 3. 烧入 FLASH 假设 FLASH 地址分段 bootloader 0x0 ~0x40000 parameter0x40000 ~0x50000 kernel (空) rootfs 0x270000~ 0x50000 ~0x250000 - 烧 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 0x40000 ,来存放 u-boot.bin SMDK2440A>nand write.jffs2 30000000 0 0x40000 //烧写 u-boot.bin 至 0x0 开始的 Nand Flash // 首 先 擦 除 Nand Flash 从 0x0 开 始 , 大 小 为 - 烧 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: 0x30008000 linux-2.6.14 Fri Jan 12 17:14:50 2007 ARM Linux Kernel Image (uncompressed) 1262504 Bytes = 1232.91 kB = 1.20 MB
-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 0x32000000 地址处 SMDK2440A>nand erase 0x50000 0x200000 为 0x200000 的空间,来存放 uImage SMDK2440A>nand write.jffs2 0x32000000 0x50000 0x200000 //烧写 uImage 至 0x30000 // 通 过 tftp server 下 载 uImage 至 开 发 板 内 存 //首先擦除 Nand Flash 从 0x50000 开始,大小 想开发板上电后自动启动 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 里去, <有一个写好的 mkz2uimage 脚本>使用 mkimage 生成 uImage 8. 用 nand 启动 u-boot 9. 用 DNW 软件用 usbslave 用 USB 传输 uImage 到内存中 注意 u-boot 默认下载的地址 10. bootm 地址 , 从内存中启动内核,验证内核是否正常<启动了 kernel,不能再回到 u-boot> =========== 关机,开机,从 nand 启动 u-boot 重下载 kernel 11. nand erase 60000 400000<大小> 清除 kernel 区 nand write.jffs2 30000000<内存中的地址> 60000 400000<大小> 12. ============= 2.X86 平台 make bzImage 但要肥编好的 zImage 复制到/boot 并改名为 vmlinuz-版本号 修改/boot/grub/grub.conf 内容为当前内核版本 ==== 驱动模块的编译, 和存放 编译内核时,编译选译 M 的模块, make modules 然后安装 M 模块, make modules_install ( 安 装 实 际 是 将 编 译 好 的 *.ko 代 码 , 复 制 到 /lib/modules/<$version>/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 内容为当前内核版本 ====
分享到:
收藏