文章目录
从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
可先不装
设置用户相关
-
passwd root , 修改root密码
-
adduser ,添加用户(可选)
-
设置主机名称:
echo "ubuntu-arm">/etc/hostname
配置网络相关
- 设置本机入口ip:
echo "127.0.0.1 localhost">>/etc/hosts
echo "127.0.0.1 ubuntu-arm">>/etc/hosts #要保证这个名字与 /etc/hostname中的主机名一致才有效
- 配置网卡
回到主机终端,到ubuntu-16.04-rootfs根目录下
sudo gedit ./etc/network/interfaces
添加
auto eth0
iface eth0 inet dhcp
# 如果QEMU测试时eth0不同需要跟着改变
- 允许自动更新dns:
dpkg-reconfigure resolvconf
确认框中都选择yes.
- 设置时区:
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)
对定制的根文件系统测试(注意 镜像要有足够大小)
希望我的文章对于大家有帮助,由于个人能力的局限性,文中可能存在一些问题,欢迎指正、补充!