本文基于創龍教儀 TL3568-PlusTEB 嵌入式教學實驗箱實現 ubuntu 系統移植。
瑞芯微平臺提供的SDK支持buildroot、Debian、yocto,但Ubuntu需要自行定制文件系統。
本文詳細介紹了如何在Ubuntu虛擬機中使用ubuntu-base構建根文件系統,包括設置軟件源、配置DNS、安裝必要軟件和桌面環境,以及修改系統配置。以及如何打包鏡像文件,并將其燒錄到瑞芯微RK3568開發板上,涉及掛載、格式化、修復和調整鏡像大小的步驟。
Ubuntu 系統簡介
Ubuntu是一個以桌面應用為主的Linux發行版操作系統,其名稱來自非洲南部祖魯語或豪薩語的“ubuntu"一詞,意思是“人性”“我的存在是因為大家的存在",是非洲傳統的一種價值觀。
Ubuntu基于Debian發行版和GNOME桌面環境,而從11.04版起,Ubuntu發行版放棄了GNOME桌面環境,改為Unity。
此前人們認為Linux難以安裝、難以使用,在Ubuntu出現后這些都成為了歷史。Ubuntu也擁有龐大的社區力量,用戶可以方便地從社區獲得幫助。自Ubuntu 18.04 LTS起,Ubuntu發行版重新開始使用GNOME3桌面環境。
ubuntu-base 構建根文件系統
1.獲取 ubuntu
在ubuntu官網獲取 ubuntu-base-18.04.5-base-arm64.tar.gz,創龍教儀提供對應的文件:
2.解壓、拷貝文件
執行以下命令將文件拷貝到ubuntu虛擬機,新建目錄,解壓:
mkdir ubuntu_rootfs
sudo tar -xpf ubuntu-base-18.04.5-base-arm64.tar.gz -C ubuntu_rootfs/
3.安裝qemu-user-static
qemu-user-static是一個仿真器,可以選取arm64配置文件仿真開發板運行環境,然后掛載下載的ubuntu-base文件,從而構建ubuntu文件系統:
sudo apt install qemu-user-static
由于下載的ubuntu-base是aarch64架構的,因此需要拷貝 qemu-aarch64-static到ubuntu_rootfs/usr/bin/下:
sudo cp /usr/bin/qemu-aarch64-static ubuntu_rootfs/usr/bin
4.設置軟件源
需要注意的是,這里要用 ARM 源,不能復制我們本機的源:
sudo vim ./ubuntu_rootfs/etc/apt/sources.list
這里我們選擇華為國內下載源,如下圖所示:
5.配置DNS
為了可以聯網更新軟件,我們拷貝本機的dns配置文件到根文件系統:
sudo cp /etc/resolv.conf ubuntu_rootfs/etc/resolv.conf
然后在/etc/resolv.conf文件中添加dns
sudo vim ./ubuntu_rootfs/etc/resolv.conf
添加內容如下:
如下圖所示:
nameserver 8.8.8.8
nameserver 114.114.114.114
6.掛載ubuntu-base文件系統
編寫掛載腳本:
#!/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
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
增加腳本執行權限:
sudo chmod +x mount.sh
掛載文件系統:
bash mount.sh -m ubuntu_rootfs/
7. 安裝必要軟件
apt-get update
apt-get install net-tools
apt-get install ethtool
apt-get install ifupdown
apt-get install psmisc
apt-get install nfs-common
apt-get install htop
apt-get install vim
apt-get install rsyslog
apt-get install iputils-ping
apt-get install language-pack-en-base
apt-get install sudo
apt-get install network-manager
8. 安裝桌面環境
apt-get install ubuntu-desktop
9. 修改root用戶密碼
為了方便,我們可以把密碼也設置為:
tronlong
passwd root
10. 添加新用戶
adduser tronlong
需要輸入用戶的一些信息,也可以直接回車保留默認值即可:
11. 新用戶使用sudo命令
默認情況下新用戶是不能使用 sudo 命令的,我們需要修改/etc/sudoers 文件。
/etc/sudoers 文件默認是只讀的,因此需要先修改此文件的寫權限,使用如下命令:
chmod u+w /etc/sudoers
然后使用 vim 打開/etc/sudoers,找到“root ALL=(ALL:ALL) ALL”這一行,在這一行下面添加:
vim /etc/sudoers
tronlong ALL=(ALL:ALL) ALL
修改完成以后保存退出,重新恢復/etc/sudoers 的只讀屬性,使用如下命令:
chmod u-w /etc/sudoers
12. 設置主機名稱和IP
echo "rk3568" > /etc/hostname
echo "127.0.0.1 localhost" >> /etc/hosts
echo "127.0.0.1 rk3568" >> /etc/hosts
13. 配置DHCP
我們配置一下網絡 DHCP,這樣系統啟動以后就會自動設置好網絡
RK3568默認有兩個網卡:
網卡eth0:
echo auto eth0 > /etc/network/interfaces.d/eth0
echo iface eth0 inet dhcp >> /etc/network/interfaces.d/eth0
網卡eth1:
echo auto eth1 > /etc/network/interfaces.d/eth1
echo iface eth1 inet dhcp >> /etc/network/interfaces.d/eth1
在實際測試中網口必須接入網線系統才能正常啟動,就是在不聯網的情況下,每次開機都要等待很久,卡在網絡連接上5分鐘,這里我們可以修改下面這個文件:
vim /lib/systemd/system/networking.service
將里面的TimeoutStartSec=5min 修改為:
TimeoutStartSec=10sec
14. 修改系統重啟默認等待時間
重啟開發板的時候,如果有進程沒有結束,系統就會等待,默認等待時間很長,導致重啟速度慢。
我們可以修改默認等待時間:
vim /etc/systemd/system.conf
找到這幾行:
#DefaultTimeoutStartSec=90s
#DefaultTimeoutStopSec=90s
#DefaultTRestartSec=100ms
解除注釋并將 DefaultTimeoutStopSec=90s 改為:
DefaultTimeoutStopSec=1s
保存退出
15. 設置開機免密登錄到圖形界面
我們使用以下命令修改 50-ubuntu.conf 文件:
vim /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
在文件末尾加入以下內容,添加完成如下圖所示:
greeter-show-manual-login=true
all-guest=false
修改完成后保存退出,然后輸入以下命令修改 gdm-autologin 文件內容,修改完成如下圖所示:
vim /etc/pam.d/gdm-autologin
接著輸入以下命令修改 gdm-password 文件內容,修改完成如下圖所示:
vim /etc/pam.d/gdm-password
然后輸入以下命令修改/root/.profile 文件:
vim /root/.profile
將文件最后一行改為以下內容,修改完成如下圖所示:
tty -s && mesg n || true
然后輸入以下命令修改 custom.conf 文件:
vim /etc/gdm3/custom.conf
到文件末尾添加以下內容,添加完成如下圖所示(紅框部分):
[daemon]
AutomaticLoginEnable=true
AutomaticLogin=root
TimedLoginEnable=true
TimedLogin=root
TimedLoginDelay=10
17. 禁用系統休眠
查看:
sudo systemctl status sleep.target
禁用:
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
18. 卸載文件系統
退出仿真環境:
exit
卸載文件系統:
bash mount.sh -u ubuntu_rootfs/
三、打包鏡像文件
18. 創建空鏡像文件
大小為20480MB(大概20G左右,注意這里需要根據實際EMMC的大小進行修改,以我的為例子是32G版本的EMMC):
dd if=/dev/zero of=ubuntu_rootfs.img bs=1M count=20480
19. 將該文件格式化成ext4文件系統
mkfs.ext4 ubuntu_rootfs.img
20.鏡像文件掛載
將該鏡像文件掛載到一個空的文件夾上,然后將ubuntu_rootfs的文件復制到該空文件夾中:
mkdir ubuntu_base_rootfs
sudo mount ubuntu_rootfs.img ubuntu_base_rootfs
sudo cp -rfp ubuntu_rootfs/* ubuntu_base_rootfs/
21.修復鏡像文件
復制完后用e2fsck修復及檢測鏡像文件系統,resize2fs 減小鏡像文件的大小:
sudo umount ubuntu_base_rootfs/
e2fsck -p -f ubuntu_rootfs.img
22.修改文件夾名稱
將ubuntu_rootfs.img拷貝到SDK的rockdev文件夾,并將ubuntu_rootfs.img改名為rootfs.img:
23.修改parameter.txt文件
這里需要注意要根據實際的emmc大小進行修改,以我為例子是32G版本的EMMC:
修改前:
修改后
0x03200000@0x00058000(rootfs),0x00040000@0x03258000(oem),0x00010000@0x03298000(amp),-@0x032a8000(userdata:grow)
@之前是大小,@之后的是地址
每0x100000為512MB,那么我這里rootfs分配的為25G.當然修改了前面的,后面的oem,amp,userdata的起始地址也需要需改。
然后回到SDK,運行./build.sh updateimg
-
嵌入式
+關注
關注
5092文章
19178瀏覽量
307694 -
Ubuntu
+關注
關注
5文章
566瀏覽量
30034 -
實驗箱
+關注
關注
0文章
62瀏覽量
9114
發布評論請先 登錄
相關推薦
評論