本篇博客主要讲基于bootloader,怎么烧录 内核 和根文件系统
1/编译内核
2/制作文件系统
3/烧录内核
烧录内核可以通过串口,可以通过网口,烧录,下面介绍通过网口来烧录
如果bootloader 能够联网的话,建议用网口来烧录.
网口烧录
因为接下来的操作要用到tftp,所以要配置网关/本机ip,serverip
因为要用到tftp,所以要在服务器主机上装tftpd,并配置/etc/default/tftpd-hpa
setenv gatewayip 192.168.1.1
setenv ipaddr 192.168.1.252
setenv serverip 192.168.1.250
mw.b 82000000 ff 200000;tftp 82000000 uImage;sf probe 0;sf erase 30000 200000;sf write 82000000 30000 200000
参数详解
按二进制写 ff 到 以内存82000000起始地址的200000字节
从tftp配置文件夹下载uImage到内存82000000
选择spi 0
对 spi 0,以30000为起始地址,200000大小字节,清spi
对 spi 0,将内存82000000上的200000字节写到spi flash地址30000,写的大小为200000
串口烧录
4/烧录文件系统
mw.b 82000000 ff 5d0000;tftp 0x82000000 rootfs_uclibc_64k.jffs2;sf probe 0;sf erase 230000 5d0000;sf write 82000000 230000 5d0000
参数详解
按二进制写ff到以内存82000000起始地址的5d0000字节
从tftp配置文件夹下载rootfs_uclibc_64k.jffs2到内存0x82000000
选择spi 0
对 spi 0,以230000为起始地址,5d0000大小字节,清spi
对 spi 0,将内存82000000上的5d0000字节写到spi flash地址230000,写的大小为5d0000
综上
- flash 0上30000到230000,为uImage镜像
- flash 0上230000到800000,为文件系统
5/uboot环境设置
setenv bootcmd 'sf probe 0;sf read 0x82000000 0x30000 0x200000;bootm 0x82000000'
setenv bootargs 'mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:192k(boot),2048k(kernel),5952k(rootfs)'
sa
//root=/dev/mtdblock2 这里 说的是mtd 设备的第三个分区 rootfs
命令详解
setenv bootcmd 'sf probe 0;sf read 0x82000000 0x30000 0x200000;bootm 0x82000000'
选择spi0
从spi0偏移量0x30000读到内存0x82000000,共读0x200000个字节.
从0x82000000启动. --------------------------------------------------------------------------------------------
有些uboot支持下面这种命令
setenv bootcmd movi read kernel 41000000\;movi read dtb 42000000\;movi read rootfs 43000000 300000\;bootm 41000000 43000000 42000000
从flash上的kernel地址读入内存41000000
从flash上的dtb地址读入内存42000000
从flash上的rootfs地址读入内存43000000
依次从41000000/43000000/42000000启动
- 参考 uboot常用命令及配置
6/启动
如果能够启动到文件系统,则表示启动成功