Linux下使用交叉编译移植U(3)

命令找不到通常是未安装软件,或者没添加路径,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-

Linux下使用交叉编译移植U

提示路径不存在

这时就需要了解这条mkimage命令的具体含义了,参考mkimage - Generate image for U-Boot

/boot/firmware/boot.scr是生成boot.scr文件的路径,如果在树莓派上直接操作这个路径就是启动分区,但是我是在Ubuntu主机操作,SD卡是挂载到Ubuntu主机的路径被改变了

查看块设备可以用命令

lsblk

Linux下使用交叉编译移植U

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

Linux下使用交叉编译移植U

在把u-boot.bin boot.scr拷到SD卡的firmware以后,确认config.txt添加了kernel=u-boot.bin就可以拔出SD卡启动树莓派2了

Linux下使用交叉编译移植U

启动过程如下

 

Linux下使用交叉编译移植U

Linux下使用交叉编译移植U-Boot到树莓派

进入登陆界面

Linux下使用交叉编译移植U

登陆名(login):root  

密码(password):debian

Linux下使用交叉编译移植U

登录成功,至此在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

-j4是采用四核处理器四线程编译,取决于主机CPU WIN7下查看CPU核心数

3移植u-boot到Raspbian Jessie系统

有了前面的尝试,后面的就水到渠成了

如果直接把刚才生成的u-boot.bin boot.scr拷到raspbian,在config.txt添加kernel=u-boot.bin

启动后停留在starting kernel...

Linux下使用交叉编译移植U-Boot到树莓派

信息显示kernel7已经通过boot.scr读取了,说明问题出在启动内核之后的部分

对比一下debian jessie和raspbian jessie的分区,文件系统都一样,就是启动分区有差别

debian jessie的启动分区

Linux下使用交叉编译移植U

raspbian jessie的启动分区

Linux下使用交叉编译移植U

发现raspbian多了一个kernel.img,几个.dtb文件,overlay里面也是.dtb文件

参考RPi U-Boot后感觉需要加载dtb(Device Tree binary)

修改boot.scr的配置文件(configure_scr_file)的内容如下

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14933.html