i.MX6UL #0 - ubuntu根文件系統的修改與配置(從零開始的掉頭髮生活)

裏先森:此篇爲轉載文章,原文來自:https://blog.csdn.net/sinat_37141443/article/details/80882219
已在此基礎上進行Ubuntu 18.04.2移植,並加入部分筆記
注意: 本篇較爲散亂,建議查看 基於ubuntu-base進行根文件系統的修改與打包_linux_裏先森-CSDN博客

入門級文檔。

由於工作需求,開始嘗試移植ubuntu 16.04 根文件系統到i.MX6UL平臺。以前主要從事一些單片機方面的開發,開始做linux上的開發也是有點摸不着頭腦,到處搜索,嘗試,在此做一下開發筆記。

開發環境:VMware Workstation 14 Player

操作系統:ubuntu 18.04.2 LTS

開發板:飛凌 OKMX6UL -C2 V1.0 ( i.MX6UL ) 

裏先森:以上修改爲我測試時的版本,沒有什麼差別,以下懶得改了,原博文使用的時ubuntu16.04.4的版本,我使用的是Ubuntu 18.04.2的版本(是的,和我開發環境上操作系統版本號一樣,但是是用的armhf版本)

1.下載根文件系統

首先創建保存路徑

$ mkdir ~/image
$ cd image
$ mkdir ubrfs16.04.4
$ cd ubrfs16.04.4

下載官方根文件系統。其他資料裏提到的都是ubuntu-core,但進入到

<a href="http://cdimage.ubuntu.com/" rel="nofollow" target="_blank">http://cdimage.ubuntu.com/</a>

,發現文件命名方式和以前不一樣了,於是我選擇了ubuntu-base-16.04.4-base-armhf.tar.gz,先進入到保存文件系統的目錄,我的目錄是

~/image/ubrfs16.04.4

下載ubuntu-base-16.04.4-base-armhf.tar.gz,

$ wget http://cdimage.ubuntu.com/ubuntu-base/releases/16.04.4/release/ubuntu-base-16.04.4-base-armhf.tar.gz

解壓文件系統,一定要用root權限解壓,否則後面會出現各種奇怪的問題。(已經踩過坑了,多麼痛得領悟。。。),我選擇直接在當前目錄解壓。

$ sudo tar zxf ubuntu-base-16.04.4-base-armhf.tar.gz

解壓後得到

$ ls
bin   dev  home  media  opt   root  sbin  sys  ubuntu-base-16.04.4-base-armhf.tar.gz  var
boot  etc  lib   mnt    proc  run   srv   tmp  usr

2.安裝qemu-user-static工具

裏先森:QEMU是一個專門模擬不同機器架構的軟件,在ubuntu中對其支持良好,若需要掛載ubuntu armhf版本的文件,必須安裝qemu-user-static工具
QMEU wiki : https://wiki.ubuntu.com/ARM/RootfsFromScratch/QemuDebootstrap

安裝qemu-user-static工具

sudo apt-get install qemu-user-static

拷貝qemu-arm-static到剛剛解壓出來的目錄

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

3.網絡配置

修改根文件系統軟件源

$ sudo vim ./etc/apt/sources.list
添加ubuntu arm源,我選擇的是中科大的源

裏先森:實驗過阿里的源,發現不支持armhf,apt更新失敗,建議使用中科大的源

deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe

爲了製作成功的根文件系統能夠聯網,可以直接拷貝本機的dns配置文件到根文件系統的相應位置,

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

4.掛在根文件系統並chroot

首先在本機掛載剛剛下載好的文件系統,聯網完成相應的配置,然後載燒錄到開發板上。

需要掛載proc, sys, dev, dev/pts等文件系統。

掛載過程的bash腳本內容:

#!/bin/bash
echo “MOUNTING”
sudo mount -t proc /proc /home/phy/image/debian-rootfs/proc
sudo mount -t sysfs /sys /home/phy/image/debian-rootfs/sys
sudo mount -o bind /dev /home/phy/image/debian-rootfs/dev
sudo mount -o bind /dev/pts /home/phy/image/debian-rootfs/dev/pts
sudo chroot /home/phy/image/debian-rootfs/

卸載過程的bash腳本內容:

#!/bin/bash
echo “UNMOUNTING”
sudo umount /home/phy/image/debian-rootfs/proc
sudo umount /home/phy/image/debian-rootfs/sys
sudo umount /home/phy/image/debian-rootfs/dev/pts
sudo umount /home/phy/image/debian-rootfs/dev

chroot後

MOUNTING
root@phy-VM:/# ls
bin dev home media opt root sbin sys ubuntu-base-16.04.4-base-armhf.tar.gz var
boot etc lib mnt proc run srv tmp usr

5.安裝軟件

首先更新源

apt update

更新完成,安裝必要軟件,這個根據需求安裝就可以了。

apt install sudo
apt install language-pack-en-base
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 vi  

裏先森:爲了之後使用insmod和lsmod,還需要
apt install kmod

6.用戶配置

設置root密碼

passwd root

創建用戶

adduser phy
設置主機名稱和本機IP
echo “i.MX6” > /etc/hostname
echo “127.0.0.1 localhost” >> /etc/hosts
echo “127.0.1.1 i.MX6” >> /etc/hosts

7.配置串口和網絡dhcp

首先配置串口,這裏踩了幾次坑,下載到板子上以後發現串口無法輸出到超級終端,找了很多方案,終於試出來了,需要做一個鏈接才行。

ln -s /lib/systemd/system/[email protected] /etc/systemd/system/getty.target.wants/[email protected]

由於我用的是i.mx6ul的平臺,需要添加一個名爲[email protected]的鏈接,連接到[email protected]服務。i.mx的平臺是ttymxc0,其他平臺的名字就不清楚了。如果確定不了名字,一個比較笨的方法就是先把製作好的根文件系統下載到開發板上,超級終端上查看打印出來的log,會在 waiting for device dev-ttymxc0.device 時出現 [Time out] ,Dependency failed for Serial Getty on ttymxc0. 由此就可以知道了。


配置DHCP,也可以等下載到開發板之後在配置,但啓動時會很慢。

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

退出根文件系統

exit
卸載根文件系統
$ sudo sh ms.sh -u /home/phy/image/ubrfs16.04.4/

8.製作鏡像

進入到根文件系統目錄

$ cd ubrfs16.04.4 

壓縮生成.bz2的鏡像

$ sudo tar jcf ubuntu-16.04.4-core-armhf.tar.bz2 *

壓縮生成的.bz2鏡像文件

$ ls
bin   dev  home  media  opt   root  sbin  sys  ubuntu-16.04.4-core-armhf.tar.bz2  var
boot  etc  lib   mnt    proc  run   srv   tmp  usr

9.燒寫鏡像

我採用的mfgtools來燒寫u-boot、zImage、rootfs.tar.bz2文件。飛凌開發板提供的資料將燒寫不同類型的系統寫成不同類型的VB腳本文件。

首先將上面生成的壓縮文件ubuntu-16.04.4-core-armhf.tar.bz2更名爲rootfs.tar.bz2,

mv ubuntu-16.04.4-core-armhf.tar.bz2 rootfs.tar.bz2

並將文件轉到宿主計算機,我用的win10系統。由於mfgtools只有windows版,所以想用它,就只能在windows下。我採用的是文件共享的方式將文件從虛擬機中拷貝到宿主計算機。

在windows系統下將rootfs.tar.bz2拷貝到 …/mfgtools/Profiles/Linux/OS Firmware/files/linux/console/目錄下

然後運行腳本燒寫到開發板。


附錄

mfgtools工具中,ucl2.xml文件中有這麼一段

	<!-- burn rootfs -->
<CMD state=“Updater” type=“push” body="$ mkfs.ext3 -E nodiscard /dev/mmcblk%mmc%p2">Formatting rootfs partition</CMD>
<CMD state=“Updater” type=“push” body="$ mkdir -p /mnt/mmcblk%mmc%p2"/>
<CMD state=“Updater” type=“push” body="$ mount -t ext3 /dev/mmcblk%mmc%p2 /mnt/mmcblk%mmc%p2"/>
<CMD state=“Updater” type=“push” body=“pipe tar -jxv -C /mnt/mmcblk%mmc%p2” file=“files/linux/console/<span style=“color:#990000;background-color:rgb(102,255,255);”>rootfs.tar.bz2</span>” ifdev=“MX6UL MX7D”>Sending and writting rootfs</CMD>
<CMD state=“Updater” type=“push” body=“frf”>Finishing qt4 write</CMD>
<CMD state=“Updater” type=“push” body="$ umount /mnt/mmcblk%mmc%p2">Unmounting rootfs partition</CMD>
<CMD state=“Updater” type=“push” body="$ echo Update Complete!">Done</CMD>
其中寫了燒寫rootfs文件的地址和文件名,也可修改它來更改下載鏡像的名字。


解壓

當後續需要從已壓縮好的 tar.bz2 根文件解壓到宿主機重新掛載的時候,使用下面的命令解壓

sudo tar xvf 你壓縮包名字 

裏先森:後續添加圖形系統,校準觸摸屏
https://blog.csdn.net/sements/article/details/88108040

參考:

1.定製適用於ARM平臺的Ubuntu rootfs(根文件系統):https://blog.csdn.net/mountzf/article/details/51707853

2.移植ubuntu core到Arm開發板:https://blog.csdn.net/kickxxx/article/details/15341079

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章