Uboot碎片知识

---------------------------------------------------------0x5800_0000                    -  /* 最顶刚好是128M   */
|                    Stack(512KB)                       |                               |  /* 可以比较好的兼容 */
---------------------------------------------------------                               |  /* 128M和256M的系统 */
|                   Malloc pool(1MB) + env(128KB)       |                               |
---------------------------------------------------------               |
|                   IRQ+FIQ Stack(未实现)               |                               |
---------------------------------------------------------               |
|                     gd_info(bd_info)                  |                               |
---------------------------------------------------------               |
|                   ............................        |                               |   
--------------------------------------------------------                |
|                      LCD/VFD Buffer                   |                               |
---------------------------------------------------------               - monitor_end   |
|                        .bss                           |               |               2MB
---------------------------------------------------------               |               |
|                        .mmudata                       |               |               |
---------------------------------------------------------               |               |
|                        .u_boot_cmd                    |               |               |
---------------------------------------------------------               monitor_flash   |
|                       .got                            |               |               |
---------------------------------------------------------               |               |
|                       .data+.rodata                   |               |               |
---------------------------------------------------------               |               |
|                       .text                           |               |               |
---------------------------------------------------------0x57E0_0000    - monitor_base  -  /* copy_from_nand只拷贝240kb到 */
|                       linux_kernel                    |                                  /* sdram,可根据实际修改uboot */
---------------------------------------------------------0x5000_8000(uImage的地址最好加载到
|                       linux_mmu_page_table            |           0x5000_7FC0,省去再搬运)
---------------------------------------------------------0x5000_4000(1级页表,包含4096个项,每个
|                       .......................         |           32bit,共16KB)
---------------------------------------------------------           (Uboot包头重叠部分解压已无效)
|        通过gd->bd->bi_boot_params指向,启动参数       |
|        用于存放需要传递给linux的TAG列表               |
---------------------------------------------------------0x5000_0100

nandflash地址分配:
0x0-0x400000 UBOOT
0x400000-0xC00000 Linux_Kernel
(bootm默认加载8MB到0x5000_0000)
(可以通过bootcmd设定加载任意大小kernel镜像到任意位置,常加载$(file_size(uboot.bin))到0x5000_8000)
(bootargs规定roofs在mtdblock2,串口波特率为115200)
0xC00000-0x80000000 root_FS

内核分为五种:
1.vmlinux(73M,由顶层Makefile产生)
是一个elf格式的文件
2.arch/arm/boot/compressed/vmlinux(3.8M,由boot/compressed目录下.vmlinux.cmd产生)
是经过压缩的elf格式的文件
3.Image(7.6M,由boot目录下.Image.cmd产生)
是经过objcopy 处理了的只包含内核代码,数据的一个文件,已经不是elf格式的了,此时还没有经过压缩
4.arch/arm/boot/zImage (3.7M,由boot目录下.zImage.cmd产生)
是对Image进行压缩的镜像文件,用作启动的时候需要Linux进行自解压
5.arch/arm/boot/uImage(zImage+64Bytes,由boot目录下.uImage.cmd产生,友善提供的uboot自带mkimage(mkuboot.sh)),可以
通过uboot工具对镜像进行二次压缩(一般不会用到),启动时由uboot进行解压

启动时对于支持mmu的系统,第一个执行文件为head.S,否则为head-nommu.S

从bootm的源码看,Uboot应该是支持Image,zImage,uImage三种格式的
Image的具体内容可以是内核或者是独立的应用程序
bootp和tftpboot都是通过netboot_common()实现的,只是前者使用bootp协议,后者使用tftp协议,netboot_common最终还是调用的bootm

nand read.i=read.e=read.jffs2 write.i=write.e=write.jffs2
nand write.yaffs=write.yaffs1(uboot代码里面多了个“+”,不知道是不是bug)

由于uboot中使能了MMU,但是没有对0x5000_0000这段地址进行映射,因此仍然可以使用这一段物理地址
另外loadx貌似文件太大的时候会出错,最好还是用tftp或者nfs

执行mkubimage出错解决方法:
sudo apt-get install liblzo2-2

启动参数命令:
tftpboot:
tftpboot 50000000 Image

写入NAND:
nand write 50000000 400000 700000

NFS:
setenv bootcmd “tftpboot c0008000 Image;bootm c0008000”
setenv bootargs “console=ttySAC0,115200 kgdbwait kgdboc=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.1.10:/mnt/rootfs ip=192.168.1.30:192.168.1.10:192.168.1.1:255.255.255.0:linux.arm11.net:eth0:off”(使用串口作为终端)
setenv bootargs “console=tty1 kgdbwait kgdboc=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.1.10:/mnt/rootfs ip=192.168.1.30:192.168.1.10:192.168.1.1:255.255.255.0:linux.arm11.net:eth0:off”(使用LCD作为终端)
setenv bootargs “console=ttySAC0,115200 user_debug=0xff kgdbwait kgdboc=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.1.10:/mnt/rootfs ip=192.168.1.30:192.168.1.10:192.168.1.1:255.255.255.0:linux.arm11.net:eth0:off”(打开所有应用段错误提示)
NAND:
setenv bootcmd “nand read 50008000 400000 700000;bootm 50008000”
setenv bootargs “console=ttySAC0,115200 kgdbwait kgdboc=ttySAC0,115200 root=/dev/mtdblock2”(yaffs)
setenv bootargs “console=ttySAC0,115200 kgdbwait kgdboc=ttySAC0,115200 root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs”(ubifs)

setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv ipaddr 192.168.1.30
setenv serverip 192.168.1.10

LPC3250的启动过程:
(1)由于3250不支持从SDCARD等外存储介质启动,需要使用光盘中的bootloader.bin(连接地址为IRAM,0x0800_0000),通过串口将这个固件加载到IRAM中运行,随后配合上位机软件将boot(kickstart、stage1)固化到启动源:SPIFlash、NorFlash、Nand。
(2)启动时只会将启动源前56kb数据搬运到IRAM(0x00~0xE000,对于Nor不进行搬运),因此专门做了一个体积小的kickstart(从0地址开始运行之后,使用位置无关码,自搬运到IRAM最后32KB地址上,因此连接地址为0x38000),kickstart用于后续代码搬运,被引导的stage1(被加载到IRAM的0地址开始运行,因此连接地址为0x00)功能已经比较成熟,可以操作DRAM,可以对Nand进行读写、配置MMU、UART等等板上硬件,配置完成后将硬件参数保存到EEPROM,方便下次启动调用,如果将kernel引导操作添加其中就是一个完整的bootloader了
(3)通过stage1硬件初始化之后,跳转到Uboot,引导kernel,其实如果将stage1的底层操作集成到Uboot的第一阶段是完全可以只做一个boot固件的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
=> help ? - alias for 'help' autoscr - run script from memory base - print or set address offset bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation dhcp - invoke DHCP client to obtain IP/boot params echo - echo args to console erase - erase FLASH memory flinfo - print FLASH memory information go - start application at address 'addr' help - print online help iminfo - print header information for application image imls - list all images found in flash itest - return true/false on integer compare loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) printenv - print environment variables protect - enable or disable FLASH write protection rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol version - print monitor version

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值