Ubuntu-16.04使用手册
Qemu是一款开源免费的仿真软件,跟VMware station类似,可以仿真一台虚拟的电脑,然后在这个电脑上安装各种操作系统、运行各种程序。Qemu和VMware station不同的是,它还可以仿真一款嵌入式开发板(支持ARM、MIPS、RISC-V等架构),在上面运行U-boot+Linux+Rootfs。
本平台在32位Ubuntu-16.04环境下,通过安装和运行qemu-system-arm,仿真一款Cortex-A9架构的ARM开发板:Vexpress,并在上面运行U-boot和Linux操作系统。没有硬件开发板的学员,可以直接在这个仿真平台上去研究U-boot、Linux内核等嵌入式软件技术,经济实惠又方便。
本平台是已经安装好qemu,版本是qemu-2.7,并设置好网络配置的Ubuntu+VMware镜像。镜像下载地址:
百度网盘:https://pan.baidu.com/s/1qaRT9A1Pj2o5U-fxg1Qojg 提取码: wjns
微云:https://share.weiyun.com/IQjOE4bi 密码:ynm2nr
若下载地址失效,请关注公众号:宅学部落;进入公众号,输入:小宅实验室,即可获取最新镜像下载地址。
使用之前,你的本地电脑要已经安装好VMware station(建议版本15.0),并且硬件配置不低于以下最低标准:
内存:2GB
硬盘:至少有15GB的空闲空间
解压该镜像,直接使用VMware打开即可运行
默认登录账户:zhaixue.cc
默认登录密码:123456
ROOT密码:123456
使用初体验
在/home/tftpboot目录下,有已经编译好的镜像文件,各个镜像文件的说明如下:
u-boot-nfs: u-boot镜像,启动参数bootargs设置为挂载NFS文件系统
uImage: Linux-4.4内核镜像文件
vexpress-v2p-ca9.dtb:Linux-4.4内核对应的设备树文件
/hone/nfs: 网络文件系统,内核启动后,会挂载此文件系统作为根文件系统
u-boot-lcd: u-boot镜像,启动参数bootargs设置为挂载SD卡根文件系统
arrootfs.ext3: SD卡文件系统镜像,内核启动后根据bootargs,会挂载此文件系统
启动u-boot,引导Linux内核镜像,并挂载NFS文件系统,使用uart作为控制台:
# cd /home/tftpboot
# ./boot-nfs.sh
启动u-boot,引导Linux内核进行,挂载SD卡文件系统,使用lcd作为控制台:
# ./boot-cd.sh
每一个仿真的虚拟开发板在Ubuntu中都是以一个进程的形式运行。如果你想重新启动开发板上的u-boot+Linux,有3种方法,一是直接在console中使用reboot命令,二是杀掉qemu-system-arm进程,通过boot-nfs.sh脚本重新启动。
# ps -a | grep qemu-system-arm
3293 pts/1 00:00:04 qemu-system-arm
# kill 3293
# ./boot-nfs.sh
第三种方法,是直接关掉qemu进程,在敲击键盘上的Ctrl+a组合键,然后再快速敲击 x 键,即可关掉虚拟开发板的运行。
如果你想运行自己编译的U-boot或Linux内核镜像,可按照下面的步骤去编译U-boot或Linux内核源码,然后将编译生成的u-boot或uImage镜像文件拷贝到/home/tftpboot目录即可。
编译Linux内核
下载Linux内核源码并解压:
下载地址:https://www.kernel.org/
# tar xvf linux-5.9.tar.gz
编译内核和dtb文件:
# cd linux-5.9
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_defconfig
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- zImage
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage LOADADDR=0x60003000
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules
TIPS:
下面这一步不要省略,否则在内核源码外编译独立的out-of-tree内核模块时,可能会报错。
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules
如果你在内核源码外,编译独立的模块,遇到下面的错误:
WRANING:symbol version dump "Module.symvers" is missing
no rule to make target 'scripts/module.lds'
可能就是忽略上面的命令的原因。
拷贝内核镜像到tftpboot目录:
# cp arch/arm/boot/uImage /home/tftpboot
# cp arch/arm/boot/dts/vexpress-v2p-ca9.dtb
启动U-boot引导内核镜像uImage
# cd /home/tftpboot
# ./boot-nfs.sh
编译U-boot
下载u-boot-2017.05.tar.bz2,并解压。下载地址:https://ftp.denx.de/pub/u-boot/
# tar xvf u-boot-2017.05.tar.bz2
修改U-boot源码:include/configs/vexpress_common.h,设置ipaddr、serverip、bootargs等参数为以下值:
#define CONFIG_BOOTCOMMAND \
"tftp 0x60003000 uImage;tftp 0x60500000 vexpress-v2p-ca9.dtb;
setenv bootargs 'root=/dev/nfs rw nfsroot=192.168.33.145:/home/nfs
init=/linuxrc console=ttyAMA0 ip=192.168.33.144';
bootm 0x60003000 - 0x60500000; "
#define CONFIG_IPADDR 192.168.33.144
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_SERVERIP 192.168.33.145
编译U-boot:
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_ca9x4_defconfig
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
启动U-boot:
# cp u-boot /home/tftpboot/u-boot-nfs
# cd /home/tftpoot
# ./boot-nfs.sh
更多资料、教程
想查看跟本平台相关的更多教程、最新版本的文档,可访问在线文档教程:Linux内核编程手册
基于该平台的嵌入式、Linux、内核、驱动开发、C语言视频教程,可访问:https://wanglitao.taobao.com