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

不用买开发板,使用QEMU就可以学习的Linux内核开发实战视频教程:《Linux内核编程》,具有一线芯片原厂开发经验的驱动工程师录制,详情点击:王利涛老师个人淘宝店:Linux内核编程