Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核
标签(空格分隔): Qemu ARM Linux
在上文《Qemu搭建ARM vexpress开发环境(一)》中已经简单讲述了通过Qemu模拟直接启动Linux内核,并挂在SD卡根文件系统的方法,这种方法是直接启动内核,与实际应用中ARM板的启动方式:u-boot、kernel、rootfs有些不同。现在就来讲述下通过Qemu搭建通过u-boot启动Linux内核并挂载根文件系统的方法。
1. 开发环境简述
嵌入式系统要正常运行,应该包含:u-boot、kernel、rootfs、appfs。这几部分在ARM开发板Flash上的位置关系应该类似于下图所示:
BootLoader | BootParameters | Kernel | Rootfs | Appfs |
---|
rootfs可以添加到开发板的Flash,也可以不用添加到开发板,而是部署到PC机上,开发板在运行完kernel,要挂载rootfs时,可以通过NFS网络挂载到设定好的PC机上的rootfs根文件系统上(下一篇文章《Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统》会详细讲解NFS网络挂载根文件系统的具体操作方法)。
2. 准备u-boot
用来使用u-boot启动加载Linux内核
2.1 下载u-boot
从http://ftp.denx.de/pub/u-boot网站选择一个u-boot版本源码下载,本文中使用的是u-boot-2017.05版本。
2.2 解压u-boot
解压u-boot:
# tar -xvf u-boot-2018.09.tar.bz2
复制
2.3 编译u-boot
直接编译
如果没有修改Makefile和config.mk文件,需要在编译时加上ARCH和CROSS_COMPILE的配置:
# make vexpress_ca9x4_defconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
复制
这种方式编译比较直接,但是在调试时,需要多次编译u-boot,参数太多会带来不便,于是可以通过以下方法,修改Makefile和config.mk文件中的ARCH和CROSS_COMPILE选项,在编译的时候就可以省去了在编译命令中添加编译配置的设置。
修改Makefile
# vim Makefile
CROSS_COMPILE = arm-linux-gnueabi-
复制
修改config.mk
# vim config.mk
ARCH = arm
复制
编译u-boot:
# make vexpress_ca9x4_defconfig
# make -j4
scripts/kconfig/conf --syncconfig Kconfig
CHK include/config.h
GEN include/autoconf.mk.dep
CFG u-boot.cfg
GEN include/autoconf.mk
*** Your GCC is older than 6.0 and is not supported
arch/arm/config.mk:66: recipe for target \'checkgcc6\' failed
make: *** [checkgcc6] Error 1
复制
在编译u-boot时可能会出现一些问题,只要逐个问题解决就可以编译完成了,如上所示问题,可以通过修改对应文件解决。
# vim arch/arm/config.mk
ifeq ($(CONFIG_$(SPL_)SYS_THUMB_BUILD),y)
#archprepare: checkthumb checkgcc6
archprepare: checkthumb
checkthumb:
@if test "$(call cc-name)" = "gcc" -a \
"$(call cc-version)" -lt "0404"; then \
echo -n \'*** Your GCC does not produce working \'; \
echo \'binaries in THUMB mode.\'; \
echo \'*** Your board is configured for THUMB mode.\'; \
false; \
fi
#else
#archprepare: checkgcc6
endif