Linux driver(二)

目录

qemu

qemu搭建arm环境

 程序验证


qemu

qemu是一个虚拟机,或者说是模拟器,它主要对单片机或者嵌入式等常用处理器进行模拟。 qemu是纯软件实现的,有整套的虚拟机实现,包括处理器虚拟化、内存虚拟化以及I/O设备的虚拟化等,但性能非常低,所以通常会配合 KVM 来进行加速。KVM是一个开源的系统虚拟化模块,它使用Linux自身的调度器进行管理,所以其核心源码很少。KVM的虚拟化需要硬件支持,是基于硬件的完全虚拟化,所以KVM和qemu配合使用时,KVM主要负责比较繁琐的 CPU 和内存虚拟化,而 qemu 则负责I/O 或各种硬件的虚拟化。

qemu操作模式:

  • 全系统模式:能够在任意支持的架构上为任何机器运行一个完整的操作系统

  • 用户模式:能够在任意支持的架构上为另一个不同的架构运行程序

qemu安装(以Ubuntu为例):

#安装qemu
sudo apt install qemu
#若安装结束找不到qemu命令,且/usr/bin和 /bin下没有相关的可执行文件
sudo apt-get install qemu-system
#qemu相关指令
cd /usr/bin 后输入qemu再按tab键得到qemu相关的匹配结果
#查看版本信息
qemu-system-arm -version
#查看帮助信息
qemu-system-arm -h

qemu搭建arm环境

1)查看qemu支持的arm开发板

 2)准备Linux内核

>> 输入sudo apt-get install gcc-arm-linux-gnueabihf 安装arm交叉编译工具链(安装时注意内核版本和编译器版本要适配)

>> 下载Linux内核并解压

#下载内核
sudo wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-6.2.6.tar.xz
#解压
tar -vxf linux-6.2.6.tar.xz

下图虽然是 linux-4.1.15的情况,但linux-6.2.6与其差不多:

>> 输入vim Makefile,按下图修改Makefile文件

>> 保存退出后,输入make vexpress_defconfig 命令,产生.config配置文件

注:1. 过程中如果出现xxx:not found的问题则需要对xxx进行安装

       2. 这里用的是vexpress_defconfig,也可以在/linux-6.2.6/arch/arm/configs里面找其他的平台配置文件

>> (最后make之make menuconfig配置内核选项)输入make -j2(表示用2个核来执行编译)编译内核,编译完成之后,会在arch/arm/boot生成 Linux 内核镜像,同时在arch/arm/boot/dts下生成设备树文件

 

3)制作根文件系统

>> 下载busybox

#下载
wget https://busybox.net/downloads/busybox-1.36.0.tar.bz2
#解压
tar -jxvf busybox-1.36.0.tar.bz2 

>> 修改Makefile文件

>> 编译

#在busybox的目录下输入如下命令
make defconfig
make menuconfig #配置busybox时注意要全屏
#BusyBox Setting->Build Options->[*]Build static binary (no shared libs)和[*]Don’t use /usr(否则busybox会安装到ubuntu的/usr下,会覆盖原系统原有的命令)
make
make install
#安装完毕后,会在busybox文件夹下生成_install文件夹
mkdir dev etc lib sys proc tmp var home root mnt usr

 >> 创建/home/myqemu/rootfs路径,将_install里面的所有内容拷贝到/home/myqemu/rootfs里

>> 拷贝交叉编译工具库文件(/usr/arm-linux-gnueabihf/lib/*)至根文件系统的lib文件夹(/home/myqemu/rootfs/lib)下

4)制作虚拟存储介质

在实际板子中需要将根文件系统保存到 flash 中去或者通过nfs的方式挂载网络文件系统供linux内核启动时访问,而qemu中没有板子,更没有flash,因此需要虚拟出一个存储介质。

dd if=/dev/zero of=rootfs.ext3.img bs=1M count=512
mkfs.ext3 rootfs.ext3.img
sudo mkdir tmpfs
sudo mount -t ext3 rootfs.ext3.img tmpfs/ -o loop
sudo cp -r ~/myqemu/rootfs/* tmpfs/
sudo umount tmpfs
rm -rf tmpfs
#tmpfs相当于一个中介,使得制作的根文件系统~/myqemu/rootfs/能够复制到flash中去

5)启动linux内核

qemu-system-arm  \
    -M vexpress-a9  \
    -m 512M  \
    -dtb ~/myarm/linux-6.2.6/arch/arm/boot/dts/vexpress-v2p-ca9.dtb  \
    -kernel ~/myarm/linux-6.2.6/arch/arm/boot/zImage  \
    -nographic  \
    -append "root=/dev/mmcblk0 rw console=ttyAMA0"  \
    -sd rootfs.ext3.img

#   1. -M vexpress-a9:      模拟vexpress-a9单板, 能够使用-M ?參数来获取该qemu版本号支持的全部单板
#   2. -m 512M:             单板执行物理内存512M
#   3. -kernel xxx/zImage:  告诉qemu单板执行内核镜像路径
#   4. -nographic:          不使用图形化界面, 仅仅使用串口
#
#   5. -append "root=/dev/mmcblk0 rw console=tty0": 
#      内核启动參数这里告诉内核vexpress单板执行. 其中:
#          5.1 root=/dev/mmcblk0:  文件系统的加载Root位置
#          5.2 rw:                 以读写的方式打开文件系统, 以便能够创建, 修改, 删除文件
#          5.3 console=tty0:       控制台
#
#   6. -sd rootfs.ext3:     从SD卡加载系统
#   7. -dtb:设备树

过程中出现的问题:

I)can't open /dev/tty3: No such file or directory

#cd到目录~/myqemu/rootfs/dev下,输入如下命令,然后再执行制作虚拟存储介质的步骤
sudo mknod tty1 c 4 1
sudo mknod tty2 c 4 2
sudo mknod tty3 c 4 3
sudo mknod tty4 c 4 4

II)can't run '/etc/init.d/rcS': No such file or directory

#在~/myqemu/rootfs/etc下创建/init.d/rcS、inittab、fstab文件
#cd到目录~/myqemu/rootfs/dev下,输入如下命令:
sudo mknod console c 5 1 
sudo mknod ttyAMA0 c 204 64
#执行制作虚拟存储介质的步骤

6) 退出qemu-linux:ctrl+a,松开后再按x 

 程序验证

1)编写hello.c程序

2)交叉编译:arm-linux-gnueabihf-gcc hello.c -o hello

3)将hello拷贝到根文件系统(~/myqemu/rootfs)下,制作虚拟存储介质,启动开发板,并执行hello文件

========================================================================= 

参考链接:

从零使用qemu模拟器搭建arm执行环境

qemu 搭建 ARM Linux环境_qemu linux_TangZhenye的博客-CSDN博客

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值