Linux ARM平台开发系列讲解(入门篇) 1.2 如何使用QEMU移植Ubuntu18.04.5到ARM芯片上

1. 概述

在开发过程中,难免会遇到需要安装Ubuntu环境的情况,本次教程适用于所有arm板子,只是其中一些细节需要稍微替换注意一下。

2.下载ARM Ubuntu18.04

本次下载的是不带桌面的Ubuntu,需要桌面的也可以下载此链接,然后用指令安装桌面即可,很简单,后面会提到
ARM64 Ubuntu 18.04.5下载地址
Linux ARM平台开发系列讲解(入门篇) 1.2 如何使用QEMU移植Ubuntu18.04.5到ARM芯片上_第1张图片

3. 安装QEMU虚拟机

首先,需要在PC上安装一个Ubuntu,我这里用的是Ubuntu18.04,在Ubuntu中安装QEMU

sudo apt-get install qemu-user-static

4. 将ARM Ubuntu18拷贝到PC虚拟机里

我这里用的是共享文件夹拷贝,你们习惯什么就用什么

sudo cp -ra /mnt/hfs/ubuntu18_base.tar ./rootfs

5. 解压Ubuntu18.04.5

注意:一定要加sudo解压,否则有些文件没权限,后续移植会报错

sudo tar -xvf ubuntu18_base.tar 

6. 编写虚拟机运行脚本

6.1 创建ch-mount.sh脚本

该文件是用来启动虚拟机的

vi ch-mount.sh

创建好后输入下列内容:

#!/bin/bash
echo "MOUNTING"
sudo mount -t proc /proc ${1}proc
sudo mount -t sysfs /sys ${1}sys
sudo mount -o bind /dev/ ${1}dev
sudo mount -o bind /dev/pts ${1}dev/pts
sudo chroot ${1}

6.2 创建umount.sh

该文件是用来推出虚拟机的

vi umount.sh

创建好后输入下列内容:

#!/bin/bash
echo "UNMOUNTING"
sudo umount ${1}proc
sudo umount ${1}sys
sudo umount ${1}dev/pts
sudo umount ${1}dev

6.3 修改脚本文件权限

chmod a+x ch-mount.sh
chmod a+x umount.sh

6.4 配置Ubuntu的下载源

注意,这里是配置arm Ubuntu的,不要把PC的给改了

sudo sed -i 's|ports.ubuntu.com|mirrors.ustc.edu.cn|g' ./etc/apt/sources.list

6.5 将PC的DNS拷贝到base_ubuntu

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

7. 启动QEMU

7.1 复制PC文件到Ubuntu18

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

7.2 启动虚拟机运行rootfs

sudo sh ch-mount.sh rootfs

进入后就会长这样

MOUNTING
root@ubuntu:/#

8. 安装一些常用功能

8.1 配置名字和hosts

这一步可以选择性做,如果不可以apt update 的话在做

echo "guo" > /etc/hostname
echo "127.0.0.1 localhost" > /etc/hosts
echo "127.0.0.1 guo" >> /etc/hosts

8.2 更新和下载

常用软件安装

apt update apt install language-pack-en-base sudo ssh net-tools network-manager iputils-ping rsyslog bash-completion htop resolvconf dialog vim nano v4l-utils alsa-utils git gcc less resolvconf autoconf autopoint libtool bison flex gtk-doc-tools glib-2.0 libglib2.0-dev libpango1.0-dev libatk1.0-dev kmod pciutils -y

如果在apt update的时候出现Couldn’t create temporary file(无法创建临时文件)的错误,将/tmp路径权限设为777之后重试即可

chmod 777 /tmp 
apt update
apt install sudo
apt install language-pack-en-base
apt install vim 
apt install ssh
apt install net-tools
apt install ethtool 
apt install ifupdown
apt install iputils-ping
apt install rsyslog
apt install htop 
apt install i2c-tools

8.3 新增用户和设置密码

  • 新增用户
sudo useradd -r -m -s /bin/bash ubuntu
  • 增加权限
chmod +w /etc/sudoers  # 给文件增加w权限
vim /etc/sudoers   # 修改文件
ubuntu ALL=(ALL:ALL) ALL  # 在root ALL=(ALL:ALL) ALL后增加
chmod -w /etc/sudoers  # 去除文件w权限
  • 设置密码
passwd ubuntu
  • 删除用户
sudo userdel ubuntu
  • 删除用户目录
sudo rm -rf /home/ubuntu

8.4 设置串口

systemctl enable [email protected]

8.5 设置网络

echo auto eth0 > /etc/network/interfaces.d/eth0
echo iface eth0 inet dhcp >> /etc/network/interfaces.d/eth0

8.6 配置hostname

echo MYD > /etc/hostname

8.7 退出

exit

8.8 关闭虚拟机

sudo sh umount.sh rootfs

以下这些功能可以自己选择性安装

9. 安装xfec桌面

 apt-get install xinit 
 apt-get install xdm 
 apt-get install xfce4 

10. 安装网络语言支持

 apt-get install synaptic
 apt-get install network-manager
 apt-get install  language-pack-zh-hant language-pack-zh-hans

11. 安装桌面网络支持

apt-get install network-manager-gnome

安装完这些,基本操作都有了,有新的需求再百度安装即可

12. 替换原rootfs烧录

将弄好的rootfs文件夹全部拷贝到IMX8的SDK里把原来的给替换掉,名字要和Makefile一致,编译烧录即可。

13. 解决Ubuntu移植网络问题

13.1 查看Ubuntu网络节点

ifconfig

输入完ifconfig后,可能会发现只有一个回环模式节点,如下图
Linux ARM平台开发系列讲解(入门篇) 1.2 如何使用QEMU移植Ubuntu18.04.5到ARM芯片上_第2张图片
然后执行下列语句却发现有物理节点,这时说明网络节点没有设置。

ifconfig -a

Linux ARM平台开发系列讲解(入门篇) 1.2 如何使用QEMU移植Ubuntu18.04.5到ARM芯片上_第3张图片

13.2 添加网络节点

以eth0为例,添加eth0网络节点

ip link set eth0 up

此时ifconfig发现已经有eth0了,但是却没有分配到ip地址

13.3 分配ip地址

输入 sudo dhclient 即可获取ip地址

$ sudo dhclient -r               //release ip 释放IP
$ sudo dhclient                  //获取IP

Linux ARM平台开发系列讲解(入门篇) 1.2 如何使用QEMU移植Ubuntu18.04.5到ARM芯片上_第4张图片

14. 开启SSH远程服务

进入ubuntu系统后,更改ssh文件,即可实现ssh登录

14.1 将PermitRootLogin项改为yes

vi /etc/ssh/sshd_config

14.2 重启sshd服务即可

service sshd restart

Linux ARM平台开发系列讲解(入门篇) 1.2 如何使用QEMU移植Ubuntu18.04.5到ARM芯片上_第5张图片

15. 问题记录

15.1 开机5min等待

  • 执行下列命令,将里面的TimeoutStartSec=5min 修改为TimeoutStartSec=2sec
sudo vim /etc/systemd/system/network-online.target.wants/networking.service
  • 执行下列命令,并修改下列参数
    DefaultTimeoutStartSec=15s
    DefaultTimeoutStopSec=15s
vim /etc/systemd/system.conf

15.2 解决apt-get安装中的E: Sub-process /usr/bin/dpkg returned an error code (1)问题

1 cd /var/lib/dpkg/
2 sudo mv info/ info_bak          # 现将info文件夹更名
3 sudo mkdir info                 # 再新建一个新的info文件夹
4 sudo apt-get update             # 更新
5 sudo apt-get -f install         # 修复
6 sudo mv info/* info_bak/        # 执行完上一步操作后会在新的info文件夹下生成一些文件,现将这些文件全部移到info_bak文件夹下
7 sudo rm -rf info                # 把自己新建的info文件夹删掉
8 sudo mv info_bak info           # 把以前的info文件夹重新改回名

返回总目录

你可能感兴趣的:(Linux,ARM平台从入门到精通,ubuntu,linux,服务器)