命令找不到通常是未安装软件,或者没添加路径,mkimage应该是包含在u-boot软件中的,由于之前用过树莓派交叉编译工具链的经验,在u-boot-2016.09文件夹的tools文件夹找到了mkimage程序
更通用的是用find命令查找
find 查找路径 -name 文件名
看来是没有添加mkimage的路径到环境变量,只需在env_gnueabihf_mkimage添加路径然后source
env_gnueabihf_mkimage修改如下
export PATH=$PATH:/root/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:/root/u-boot-2016.09/tools export ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
提示路径不存在
这时就需要了解这条mkimage命令的具体含义了,参考mkimage - Generate image for U-Boot
/boot/firmware/boot.scr是生成boot.scr文件的路径,如果在树莓派上直接操作这个路径就是启动分区,但是我是在Ubuntu主机操作,SD卡是挂载到Ubuntu主机的路径被改变了
查看块设备可以用命令
lsblk
sdb就是SD卡,sdb1是firmware启动分区,sdb2是rootfs文件系统分区
事实上插入SD卡时Ubuntu自动把SD卡mount到了主机的/media路径,所以前面才能对u-boot.bin直接复制粘贴操作
但是想把SD卡的第一分区挂载到其它路径,比如主机的/mnt文件夹下,应该
mount /dev/sdb1 /mnt
注意设备的实际路径和挂载后路径的区别,/dev/xxx才是实际的设备路径
在debian jessie的树莓派上查看SD卡路径如下
这是因为debian jessie没有自动挂载功能
可以把boot.scr直接生成到firmware下(先在Ubuntu插好SD卡)
mkimage -A arm -O linux -T script -C none -a 0x00000000 -e 0x00000000 -n "RPi2 Boot Script" -d /root/script_u-boot/configure_scr_file /media/boot/firmware/boot.scr
更推荐生成在其它目录(比如u-boot-2016.09文件夹)再拷到SD卡,最终改为如下,-n是生成的文件名
mkimage -A arm -O linux -T script -C none -a 0x00000000 -e 0x00000000 -n boot.scr -d /root/script_u-boot/configure_scr_file /root/u-boot-2016.09/boot.scr
成功生成boot.scr
在把u-boot.bin boot.scr拷到SD卡的firmware以后,确认config.txt添加了kernel=u-boot.bin就可以拔出SD卡启动树莓派2了
启动过程如下
进入登陆界面
登陆名(login):root
密码(password):debian
登录成功,至此在debian jessie上的u-boot移植完成
在主机上交叉编译生成boot.bin,也可以不添加环境变量ARCH,CROSS_COMPILE,直接在make语句指定编译器
make_ubootbin可以改为如下
cd /root/u-boot-2016.09
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- rpi_2_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4
cd /root/script_u-boot
3移植u-boot到Raspbian Jessie系统
有了前面的尝试,后面的就水到渠成了
如果直接把刚才生成的u-boot.bin boot.scr拷到raspbian,在config.txt添加kernel=u-boot.bin
启动后停留在starting kernel...
信息显示kernel7已经通过boot.scr读取了,说明问题出在启动内核之后的部分
对比一下debian jessie和raspbian jessie的分区,文件系统都一样,就是启动分区有差别
debian jessie的启动分区
raspbian jessie的启动分区
发现raspbian多了一个kernel.img,几个.dtb文件,overlay里面也是.dtb文件
参考RPi U-Boot后感觉需要加载dtb(Device Tree binary)
修改boot.scr的配置文件(configure_scr_file)的内容如下