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

#从脚本文件夹切换到u-boot文件夹下 cd /root/u-boot-2016.09 #配置适用于树莓派2的u-boot make rpi_2_defconfig #编译 make all
#返回脚本文件夹 cd
/root/script_u-boot

 

切换路径是因为执行这个脚本是在script_u-boot文件夹,而make命令执行Makefile是在u-boot-2016.09文件夹,最后切回路径方便后续的source

这里make rpi_2_defconfig是针对树莓派2板,其它版本树莓派的make config参考前文的移植u-boot到树莓派参考例程(1)(4)

执行make_ubootbin无报错

Linux下使用交叉编译移植U

在u-boot-2016.09文件夹下生成了u-boot.bin

Linux下使用交叉编译移植U

把debian jessie的SD卡通过读卡器插到电脑,注意先选中虚拟机的Ubuntu系统,Ubuntu会自动读取(mount)SD卡

rootfs(根文件系统)分区:

Linux下使用交叉编译移植U

firmware(debian jessie下的启动分区):

Linux下使用交叉编译移植U

关于启动分区config.txt bootcode.bin cmdline.txt start.elf kernel7.img等文件,参考前文的树莓派启动过程

至此可以把u-boot.bin拷到sd卡的firmware(对于debian jessie系统)

然后在config.txt添加

kernel=u-boot.bin

指定用u-boot.bin启动内核kernel7,config.txt是内核的配置文件,类似电脑的BIOS配置

配置内核的方法:

一种方法是在u-boot阶段手动输入命令,而mainline版本的u-boot不支持usb输入,尝试过例程(1)中的Stephen Warren版本,也无法输入(问题还有待调查)

另一种是把u-boot中输入的命令写到一个脚本文件,通过mkimage命令将这个脚本生成.scr镜像,然后放到启动分区,u-boot会自动读取脚本来启动内核,这样更简单更容易修改,但是不利于调试错误信息

用第一种方法可以拔出SD卡,在树莓派上配置内核启动,注意在u-boot阶段只能通过HDMI外接显示屏或者串口来查看输出信息.关于串口可以参考RPi Serial Connection

用第二种方法是在Ubuntu主机上生成boot.scr镜像,先写一个配置文件:在script_u-boot文件夹下新建configure_scr_file,内容如下

 

#设置环境为树莓派2 setenv machid 0x00000c42
#设置打印信息,允许HDMI,允许串口,设置根文件系统路径和类型 setenv bootargs
"earlyprintk console=tty0 console=ttyAMA0 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait noinitrd"
#保存环境配置 saveenv
#载入内核镜像到MMC0的第一分区 fatload mmc
0:1 ${kernel_addr_r} kernel7.img
#启动内核 bootz ${kernel_addr_r}
 

 

以上命令的语法都是u-boot软件规定,关于命令的细节可以参考RPi U-Boot   官方文档U-Bootdoc   

然后新建一个脚本make_ubootscr生成scr镜像,make_ubootscr内容如下

#生成boot.scr镜像文件 mkimage -A arm -O linux -T script -C none -a 0x00000000 -e 0x00000000 -n "RPi2 Boot Script" -d /path/to/script /boot/firmware/boot.scr

/path/to/script是configure_scr_file的路径,替换后如下

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 /boot/firmware/boot.scr

source报错,提示未安装mkimage

Linux下使用交叉编译移植U

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

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