SyterKit是一個(gè)純裸機(jī)框架,可以用于TinyVision或者v851se/v851s/v853等芯片的開發(fā)板,SyterKit使用CMake作為構(gòu)建系統(tǒng)構(gòu)建,支持多種應(yīng)用與多種外設(shè)驅(qū)動(dòng)。同時(shí)SyterKit也具有啟動(dòng)引導(dǎo)的功能,可以替代U-Boot實(shí)現(xiàn)快速啟動(dòng)。
在開始系統(tǒng)構(gòu)建前需要準(zhǔn)備TinyVision開發(fā)板及如下線材,
使用40Gbps數(shù)據(jù)線連接TinyVision開發(fā)板和TypeC-SUB調(diào)試器,如下圖所示:
使用兩條Type-C連接TypeC UART調(diào)試器和電腦端,連接完成后即可按照下文步驟構(gòu)建系統(tǒng)。
從零構(gòu)建SyterKit
構(gòu)建 SyterKit 非常簡(jiǎn)單,只需要在 Linux 操作系統(tǒng)中安裝配置環(huán)境即可編譯。SyterKit 需要的軟件包有:
gcc-arm-none-eabi
CMake
對(duì)于常用的 Ubuntu 系統(tǒng),可以通過如下命令安裝:
sudo apt-get update sudo apt-get install gcc-arm-none-eabi cmake build-essential -y
然后新建一個(gè)文件夾存放編譯的輸出文件,并且進(jìn)入這個(gè)文件夾
mkdir build cd build
然后運(yùn)行命令編譯 SyterKit
cmake .. make??
編譯后的可執(zhí)行文件位于 build/app 中,這里包括 SyterKit 的多種APP可供使用。
這里我們使用的是 syter_boot 作為啟動(dòng)引導(dǎo)。進(jìn)入 syter_boot 文件夾,可以看到這些文件
由于 TinyVision 是 TF 卡啟動(dòng),所以我們需要用到syter_boot_bin_card.bin
? ?
編譯Linux-6.1內(nèi)核
由于 Debian 12 配套的內(nèi)核是 Linux 6.1 LTS,所以這里我們選擇構(gòu)建 Linux 6.1 版本內(nèi)核。
搭建編譯環(huán)境
安裝一些必要的安裝包
sudo apt-get update && sudo apt-get install -y gcc-arm-none-eabi gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf build-essential libncurses5-dev zlib1g-dev gawk flex bison quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip lsof
獲取內(nèi)核源碼
內(nèi)核源碼托管在 Github 上,可以直接獲取到,這里使用--depth=1 指定 git 深度為 1 加速下載。
git clone http://github.com/YuzukiHD/TinyVision --depth=1
然后進(jìn)入內(nèi)核文件夾
cd kernel/linux-6.1
配置內(nèi)核選項(xiàng)
應(yīng)用 defconfig
CROSS_COMPILE=arm-linux-gnueabihf- make ARCH=arm tinyvision_defconfig
進(jìn)入menuconfig配置選項(xiàng)
CROSS_COMPILE=arm-linux-gnueabihf- make ARCH=arm menuconfig
進(jìn)入General Setup,
選中Control Group Support,
前往File Systems,
找到FUSE support,
前往File Systems,
找到Inotify support for userspace,
編譯內(nèi)核
CROSS_COMPILE=arm-linux-gnueabihf- make ARCH=arm
使用debootstrap
構(gòu)建debian rootfs
下載安裝依賴環(huán)境
sudo apt install debootstrap qemu qemu-user-static qemu-system qemu-utils qemu-system-misc binfmt-support dpkg-cross debian-ports-archive-keyring --no-install-recommends
生成目標(biāo)鏡像,配置環(huán)境,這里我們生成一個(gè) 1024M 的鏡像文件用于存放 rootfs
dd if=/dev/zero of=rootfs.img bs=1M count=1024 mkdir rootfs mkfs.ext4 rootfs.img sudo mount rootfs.img rootfs
這里我們選擇最新的 debian12 (bookwarm) 作為目標(biāo)鏡像,使用清華源來構(gòu)建,輸出到目標(biāo)目錄 rootfs_data 文件夾中。新版本的 debootstrap 只需要運(yùn)行一次即可完成兩次 stage 的操作,相較于老版本方便許多。
sudo debootstrap --arch=armhf bookworm rootfs_data https://mirrors.tuna.tsinghua.edu.cn/debian/??
等待構(gòu)建完成后,使用chroot進(jìn)入到目錄,這里編寫一個(gè)掛載腳本方便掛載使用,新建文件 ch-mount.sh 并寫入以下內(nèi)容:
然后賦予腳本執(zhí)行的權(quán)限,執(zhí)行掛載,可以看到進(jìn)入了 debian 的 rootfs
配置系統(tǒng)字符集,選擇 en_US 作為默認(rèn)字符集,選擇一個(gè)就可以
export LC_ALL=en_US.UTF-8 apt-get install locales dpkg-reconfigure locales? ? ? ?
安裝Linux基礎(chǔ)工具
apt install sudo ssh openssh-server net-tools ethtool wireless-tools network-manager iputils-ping rsyslog alsa-utils bash-completion gnupg busybox kmod wget git curl --no-install-recommends
安裝編譯工具
apt install build-essential
安裝Linux nerd工具
apt install vim nano neofetch
設(shè)置本機(jī)入口ip地址
cat </etc/hosts 127.0.0.1 localhost 127.0.1.1 $HOST ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters EOF
配置網(wǎng)卡
mkdir -p /etc/network cat >/etc/network/interfaces <
配置DNS地址
cat >/etc/resolv.conf <
配置分區(qū)
cat >/etc/fstab </dev/mmcblk0p1 /boot vfat defaults 0 0 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 EOF
配置root密碼
passwd
配置主機(jī)名
echo TinyVision > /etc/hostname
取消掛載chroot
./ch-mount.sh -u rootfs_data/
拷貝rootfs到鏡像中
sudo cp -raf rootfs_data/* rootfs
取消掛載
sudo umount rootfs
打包固件
完成以上步驟debian rootfs就制作好了。
編譯完成 bootloader,內(nèi)核,rootfs 后,還需要打包固件成為可以 dd 寫入的固件,這里我們使用 genimage 工具來生成構(gòu)建。
生成刷機(jī)鏡像
編譯內(nèi)核后,就可以生成sun8i-v851se-tinyvision.dtb和zImage文件,我們把他們拷貝出來。
然后將sun8i-v851se-tinyvision.dtb改名為sunxi.dtb,這個(gè)設(shè)備樹名稱是定義在SyterKit源碼中的,如果之前修改了SyterKit的源碼需要修改到對(duì)應(yīng)的名稱,SyterKit會(huì)去讀取這個(gè)設(shè)備樹。
然后編寫一個(gè)config.txt作為配置文件
[configs] bootargs=root=/dev/mmcblk0p2 earlyprintk=sunxi-uart,0x02500000 loglevel=2 initcall_debug=0 rootwait console=ttyS0 init=/sbin/init mac_addr=4a:13f9:79:75 bootdelay=3
安裝genimage作為打包工具。
sudo apt-get install libconfuse-dev #安裝genimage依賴庫 sudo apt-get install genext2fs # 制作鏡像時(shí)genimage將會(huì)用到 git clone https://github.com/pengutronix/genimage.git cd genimage ./autogen.sh # 配置生成configure ./configure # 配置生成makefile make sudo make install
編譯后運(yùn)行試一試,這里正常
編寫 genimage.cfg 作為打包的配置
由于genimage的腳本比較復(fù)雜,所以編寫一個(gè)genimage.sh作為簡(jiǎn)易使用的工具
準(zhǔn)備完成,文件如下所示
運(yùn)行命令進(jìn)行打包
chmod 777 genimage.sh ./genimage.sh -c genimage.cfg?
打包完成,可以找到img文件,使用軟件燒錄固件到TF卡上。
本文內(nèi)容均轉(zhuǎn)載自https://www.gloomyghost.com/live/20231220.aspx
審核編輯:劉清
-
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
587瀏覽量
27202 -
調(diào)試器
+關(guān)注
關(guān)注
1文章
297瀏覽量
23579 -
TF卡
+關(guān)注
關(guān)注
2文章
69瀏覽量
12061 -
Type-C接口
+關(guān)注
關(guān)注
1文章
140瀏覽量
20494
原文標(biāo)題:使用TinyVision手動(dòng)構(gòu)建Linux 6.1 + Debian 12鏡像
文章出處:【微信號(hào):gh_79acfa3aa3e3,微信公眾號(hào):全志在線】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論