从0开始使用QEMU模拟ARM开发环境之定制Ubuntu rootfs(根文件系统)

从0开始使用QEMU模拟ARM开发环境系列一览表:

从0开始使用QEMU模拟ARM开发环境系列一览表

准备:

QEMU安装 参见 上面文章

下载Ubuntu,http://cdimage.ubuntu.com/ubuntu-base/releases/,比如我下载的是 ubuntu-base-16.04.6-base-armhf.tar.gz

# 创建目录
sudo mkdir ubuntu-16.04-rootfs
# 解压到指定目录
sudo tar xvf ubuntu-base-16.04.6-base-armhf.tar.gz -C ubuntu-16.04-rootfs

进入ubuntu-16.04-rootfs根目录拷贝 qemu-user-static./usr/bin/

sudo cp /usr/bin/qemu-arm-static ./usr/bin/

如果没有 qemu-user-static ,看是否QEMU安装正确或者直接

sudo apt-get install qemu-user-static

注意:如果主机是Ubuntu 16 或者 18,而定制的根文件系统是基于 Ubuntu 20 的 那么直接拷贝 qemu-user-static 使用会出现如下问题,解决办法 下载 https://download.csdn.net/download/leacock1991/15740544 或者 在使用主机是Ubuntu 20
在这里插入图片描述

将本机的dns配置复制到目标rootfs(这里是 ubuntu-16.04-rootfs),用于后面qemu模拟联网用

sudo cp /etc/resolv.conf ./etc/resolv.conf

注意 ./ 前的点.

如果定制的是 Ubuntu 20 根文件系统为了后期能在板子上联网,还要额外对 dns 配置,在 ./etc/systemd/resolved.conf 修改,如下图
在这里插入图片描述

将本机的 /etc/apt/sources.list 复制到目标rootfs(这里是 ubuntu-16.04-rootfs)
不能复制,arm使用的其链接不同

修改 ./etc/apt/sources.list 地址为国内源,比如 替换为 mirrors.aliyun.com

挂载相关文件系统并chroot

挂载proc, sys, dev, dev/pts等文件系统。回到ubuntu-16.04-rootfs上层目录创建脚本,并赋予可执行权限

文件 ms.sh

#!/bin/bash
mnt () 
{
    echo "MOUNTING"
    sudo mount -t proc /proc ${2}proc
    sudo mount -t sysfs /sys ${2}sys
    sudo mount -o bind /dev ${2}dev
    sudo mount -o bind /dev/pts ${2}dev/pts      
    sudo chroot ${2}    
}
umnt ()
{
    echo "UNMOUNTING"
    sudo umount ${2}proc
    sudo umount ${2}sys
    sudo umount ${2}dev/pts
    sudo umount ${2}dev 
}

if [ "$1" = "-m" ] && [ -n "$2" ];
then
    mnt $1 $2
    echo "mnt -m pwd"
elif [ "$1" = "-u" ] && [ -n "$2" ];
then
    umnt $1 $2
    echo "mnt -u pwd"
else
    echo ""
    echo "Either 1'st, 2'nd or bothparameters were missing"
    echo ""
    echo "1'st parameter can be one ofthese: -m(mount) OR -u(umount)"
    echo "2'nd parameter is the full pathof rootfs directory(with trailing '/')"
    echo ""
    echo "For example: ms -m /media/sdcard/"
    echo ""
    echo 1st parameter : ${1}
    echo 2nd parameter : ${2}
fi

文件start

#!/bin/bash

if [ "$1" ];then
    echo $1
else
    echo "请传入mount的待定制根文件系统路径"
    exit 1
fi
sudo sh ms.sh -m $1

文件close

#!/bin/bash

if [ "$1" ];then
    echo $1
else
    echo "请传入umount的待定制根文件系统路径"
    exit 1
fi

sudo sh ms.sh -u $1

运行脚本start

./start ubuntu-16.04-rootfs/

在这里插入图片描述

安装所需软件包

在上面 root@leacock-virtual-machine:/# 下 进行操作

更新源

apt update

更新完成,安装必要软件,根据需求安装

apt-get install \
	language-pack-en-base \
	sudo \
	ssh \
	net-tools \
	ethtool \
	ifupdown \
	iputils-ping \
	resolvconf \
	tzdata \
	rsyslog \
	htop \
    vim 
gcc \
g++ \
cmake \
make
可先不装

设置用户相关

  1. passwd root , 修改root密码

  2. adduser ,添加用户(可选)

  3. 设置主机名称:

echo "ubuntu-arm">/etc/hostname

配置网络相关

  1. 设置本机入口ip:
 echo "127.0.0.1 localhost">>/etc/hosts
 echo "127.0.0.1 ubuntu-arm">>/etc/hosts #要保证这个名字与 /etc/hostname中的主机名一致才有效
  1. 配置网卡

回到主机终端,到ubuntu-16.04-rootfs根目录下

sudo gedit ./etc/network/interfaces

添加

auto eth0
iface eth0 inet dhcp
# 如果QEMU测试时eth0不同需要跟着改变
  1. 允许自动更新dns:

dpkg-reconfigure resolvconf

确认框中都选择yes.

  1. 设置时区:

dpkg-reconfigure tzdata

依次选择6 、70

设置可使用root用户登录ssh

vim /etc/ssh/sshd_config

找到PermitRootLogin prohibit-password,改成PermitRootLogin yes

配置串口调试服务

具体可能会因为目标板差异而不同,具体要参考所使用的平台进行修改。从0开始使用QEMU模拟ARM开发环境系列中登录串口为ttyAMA0

cd /etc/systemd/system/getty.target.wants

cp -d getty@tty1.service getty@ttyAMA0.service

在这里插入图片描述

这样避免后面使用QEMU模拟启动时可能出现的 Timed out waiting for device dev-ttyAMA0.device. 问题

打包与QEMU测试

退出 root@leacock-virtual-machine:/# 并 运行close脚本

进入ubuntu-16.04-rootfs/文件夹中

sudo tar cvf ubuntu-16.04-rootfs.tar.gz *

注意 打包命令,如果保重有多层目录会导致后面步骤出问题

参考从0开始使用QEMU模拟ARM开发环境之脚本制作分区镜像(rootfs+zImage+dtb)

对定制的根文件系统测试(注意 镜像要有足够大小)

在这里插入图片描述

希望我的文章对于大家有帮助,由于个人能力的局限性,文中可能存在一些问题,欢迎指正、补充!

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是在QEMU模拟ARM开发板并使用U-Boot引导系统镜像进行系统移植的详细步骤: 1. 安装QEMU:首先,你需要安装QEMU模拟器。据你的操作系统选择适合的版本,并按照官方文档的指导进行安装。 2. 获取ARM开发板固件:你需要获取一个ARM开发板的固件镜像,这包括U-Boot引导加载器和操作系统映像文件。通常可以从开发板供应商或开源社区获取这些镜像。 3. 创建虚拟机:打开终端或命令提示符窗口,运行以下命令来创建一个虚拟机实例,其中`path_to_uboot_image`是指向U-Boot镜像文件的路径,`path_to_kernel_image`是指向内核映像文件的路径,`path_to_rootfs_image`是指向文件系统映像文件的路径: ``` qemu-system-arm -M <machine> -m <memory> -kernel <path_to_uboot_image> -dtb <path_to_dtb_file> -append "console=ttyAMA0" -sd <path_to_rootfs_image> ``` 其中,`machine`是指定要模拟ARM开发板型号(例如`versatilepb`),`memory`是指定虚拟机的内存大小(例如`256M`),`path_to_dtb_file`是指向设备树二进制文件(DTB)的路径。 4. 启动虚拟机:运行上述命令后,QEMU将启动虚拟机,并加载U-Boot引导加载器。你将在终端或命令提示符窗口中看到U-Boot的输出信息。 5. 进行系统移植:一旦虚拟机启动成功,你可以在U-Boot的命令行界面中输入命令来配置和加载操作系统。你可能需要设置环境变量、加载内核映像和设备树,以及设置启动参数等。 6. 测试和调试:完成系统移植后,你可以在虚拟机中进行测试和调试。你可以运行应用程序,测试系统的功能和性能。 需要注意的是,U-Boot的配置和使用可能因不同的开发板和需求而有所不同。确保阅读U-Boot的文档以了解更多配置和使用细节。 希望这些详细步骤能够帮助你在QEMU模拟ARM开发板,并使用U-Boot引导系统镜像进行系统移植。如果你有任何进一步的问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值