helpera64開發板下制作ubuntu rootfs鏡像


環境:

  • HelperA64開發板
  • Linux3.10內核
  • 主機:ubuntu16.04

目標:定制ubuntu-core rootfs鏡像

一、下載ubuntucore文件系統

下載地址:http://cdimage.ubuntu.com/ubuntu-base/releases/18.04/release/

ubuntu下使用wget來快捷下載

wget http://cdimage.ubuntu.com/ubuntu-base/releases/18.04/release/ubuntu-base-18.04.3-base-arm64.tar.gz

創建ubuntucore與rootfs文件夾,然后解壓ubuntucore文件系統到rootfs中。然后刪除ubuntucore文件系統。

mkdir -p ubuntucore/rootfs
cp ubuntu-base-18.04.3-base-arm64.tar.gz ubuntucore/rootfs
cd ubuntucore/rootfs
tar -xvf ubuntu-base-18.04.3-base-arm64.tar.gz
rm -rf ubuntu-base-18.04.3-base-arm64.tar.gz

二、qemu的下載與使用

1、在PC上模擬運行根文件系統。需要安裝一個工具:

sudo apt-get install qemu-user-static

然后輸入命令:

cd ubuntucore  
sudo cp /usr/bin/qemu-aarch64-static rootfs/usr/bin/

2、新創建ch-mount.sh腳本:

#!/bin/bash

function 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 chroot ${2}
}
function umnt() {
    echo "UNMOUNTING"
    sudo umount ${2}proc
    sudo umount ${2}sys
    sudo umount ${2}dev

}

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

 創建完成后給mount.sh可執行屬性:

chmod +x ch-mount.sh

3、虛擬根文件系統的運行退出

運行:

./ch-mount.sh -m rootfs/

退出:

exit
./ch-mount.sh -u rootfs/

如下圖:

注:

  • 如果退出虛擬根文件系統沒有執行./mount.sh -u rootfs而重復執行執行./mount.sh -m rootfs。將會導致系統出故障,只能重新啟動電腦,然后才能進入虛擬根文件系統。

三、安裝必要的軟件

1、拷貝主機網絡配置到虛擬根文件系統(這樣才能安裝軟件),命令如下:

cd ubuntucore/
sudo cp -b /etc/resolv.conf  rootfs/etc/resolv.conf

2、安裝軟件

./ch-mount.sh -m rootfs/
apt update
apt install wget udev kmod iproute2 net-tools systemd vim
apt-get install language-pack-en-base sudo ssh ethtool
apt-get install wireless-tools ifupdown network-manager iputils-ping
rsyslog
apt-get install bash-completion htop lrzsz --no-install-recommends

 如果出現如下圖錯誤,重新改下 tmp 目錄的權限: chmod 777 /tmp/

 四、用戶設置

給系統增加一個帳號:szbaijie

useradd -s '/bin/bash' -m -G adm,sudo szbaijie

修改 szbaijie 用戶密碼,回車后按提示輸入兩次密碼:

passwd szbaijie

設置 root 權限的密碼命令為 szbaijie:

passwd root

注:

  • 在 root 用戶下給 szbaijie 增加 sudo 用戶權限。vi 進入/etc/sudoers/中在 root 一行下面加入內容:szbaijie ALL=(ALL:ALL) ALL

五、解決問題

1、 當開發板 root 登陸操作系統界面時,會出現警告,修改如下:

vi /root/.profile

 然后將 mesg n 替換為 tty - s && mesg n

2、ping 不能正常工作的問題(超級郁悶的問題):

vi /etc/group

 在文件最后加入:

inet:x:3003:root
net_raw:x:3004:root

3、xshell 中 vim 進入后 xshell 只顯示一半和亂碼的問題

 vim /root/.bashrc

 在文件最后加入

export TERM=xterm

4、原有的設備文件不可寫,所以編譯打包會出錯,打包不了,所以需要刪除。

 如果 dev 下為,不用刪除了。如果不為空,則將黃色部分全部刪除,命令如下:

cd ubuntucore/rootfs/dev/
rm -rf full null ptmx random tty urandom zero

 5、退出虛擬根文件系統都要執行修改下用戶權限,命令如下:

chown -R 用戶名.用戶名 rootfs

 六、設置啟動腳本與服務

首先,創建system文件夾。
mkdir rootfs/usr/lib/systemd/system/
cd rootfs/usr/lib/systemd/system/

然后建立firstboot.sh、firstboot.service和rcs.service和rcS

1、firstboot.sh

#!/bin/sh                                                                                                                                                                                                           

mkfs.ext4 /dev/mmcblk0p1
chmod +s /usr/bin/sudo
chmod a+s /bin/su
chown -R szbaijie:szbaijie /home/szbaijie/
chown lightdm:lightdm -R /var/lib/lightdm
chown colord:colord -R /var/lib/colord/

rm -rf /etc/systemd/system/multi-user.target.wants/firstboot.service
exit 0

2、firstboot.service

[Unit]
Description=fristboot-Service
Before=rcS.service
[Service]
Type=forking
ExecStart=/usr/lib/systemd/system/firstboot.sh start
[Install]
WantedBy=multi-user.target

3、rcS

#!/bin/sh
mkdir /data
mount -t ext4 /dev/mmcblk0p1 /data
alias ll='ls -l'

insmod /lib/modules/`uname -r`/usbnet.ko
insmod /lib/modules/`uname -r`/asix.ko
insmod /lib/modules/`uname -r`/sunxi-keyboard.ko
insmod /lib/modules/`uname -r`/disp.ko
insmod /lib/modules/`uname -r`/8723bs.ko
insmod /lib/modules/`uname -r`/videobuf2-dma-contig.ko
insmod /lib/modules/`uname -r`/vfe_io.ko
insmod /lib/modules/`uname -r`/gc2145.ko
insmod /lib/modules/`uname -r`/gc0312.ko
insmod /lib/modules/`uname -r`/vfe_v4l2.ko
insmod /lib/modules/`uname -r`/gt9xxnew_ts.ko                                                                                                                                                                       
dhclient eth0 &

4、rcs.service

[Unit]                                                                                                                                                                                                              
Description=rcS-Service
After=rcS.service
[Service]
Type=forking
ExecStart=/usr/lib/systemd/system/rcS start 
[Install] WantedBy=multi-user.target

5、使能firstboot.service、rcs.service服務

進入虛擬根文件系統,執行以下命令。

使能后會在/etc/systemd/system/multi-user.target.wants/ firstboot.service 指向我們建立的 firstboot.service(指向下圖)。

同理,rcs.service服務也是這樣。

6、設置完后,退出虛擬根文件系統並設置目錄擁有者(每次退出都要操作這個)。

最后,將 rootfs 用 tar 命令壓縮打包為保存好(接下來就是安裝xfce桌面環境了)。

sudo tar -zcvf ubuntu_core_18.04.tar.gz rootfs/ 

七、安裝桌面環境xfce

1、進入虛擬根文件系統中,然后執行以下命令:

./ch-mount.sh -m rootfs/
apt-get install lightdm

如果出現以下錯誤:

執行以下命令可消除錯誤:

chmod 777 rootfs/tmp/

在安裝 lightdm(桌面顯示管理器)時,會出現時區、地區等選擇,選擇對應位置就行。如下:

2、 安裝完 lightdm 后,就是安裝桌面環境xfce。

apt-get install --no-install-recommends xubuntu-desktop –y

3、設置 root 用戶下打不開 gnome-terminal 的問題:

vi /etc/default/locale

在里面添加:LANG=zh_CN.UTF-8
然后執行下列命令,root 用戶就能啟動 gnome-terminal 終端了

locale-gen zh_CN.UTF-8

最后,退出虛擬根文件系統。

八、打包

具體的打包過程參考 HelperA64 參考手冊的第八章,其他平台按照其他平台方式打包。

有時候我們打包會失敗,查到原因如下

然后給 void 權限就可以成功打包了。

chmod 777 rootfs/var/lib/snapd/void/

九、替換源

以 root 身份打開 sources.list,將 :http://ports.ubuntu.com/ 全部替換為中科大的源:http://mirrors.ustc.edu.cn/ubuntu-ports/

cd ubuntucore/
vi rootfs/etc/apt/sources.list

vi 進入 sources.list 時,命令行模式下輸入下面命令一鍵替換源:

:%s/ports.ubuntu.com/mirrors.ustc.edu.cn/g

十、總結

在制作的過程中會遇到麻煩和挫折,多去查資料和操作就能成功,在此基礎上可以搞出更多的功能。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM