安徽國(guó)貿(mào)集團(tuán)網(wǎng)站建設(shè)沈陽(yáng)網(wǎng)站推廣優(yōu)化
源碼獲取
源碼獲取和操作流程
1.下載liunux下的系統(tǒng)制作腳本,可以燒錄系統(tǒng)和構(gòu)建鏡像
git clone https://github.com/friendlyarm/sd-fuse_s5p6818.git
如果出現(xiàn)git錯(cuò)誤可使用如下方法:
git config --global http.sslverify false
2.閱讀該工具readme
sd-fuse_s5p6818
簡(jiǎn)介
sd-fuse 提供一些工具和腳本, 用于制作SD卡固件, 具體用途如下:
- 制作分區(qū)鏡像文件, 例如將rootfs目錄打包成rootfs.img
- 將多個(gè)分區(qū)鏡像文件打包成可直接寫SD卡的單一鏡像文件
- 簡(jiǎn)化內(nèi)核和uboot的編譯, 一鍵編譯內(nèi)核、第三方驅(qū)動(dòng), 并更新rootfs.img中的內(nèi)核模塊
其他語(yǔ)言版本:?English
運(yùn)行環(huán)境
- 在電腦主機(jī)端使用
- 推薦的操作系統(tǒng): Ubuntu 18.04及以上64位操作系統(tǒng)
- 推薦運(yùn)行此腳本初始化開發(fā)環(huán)境: https://github.com/friendlyarm/build-env-on-ubuntu-bionic
支持的內(nèi)核版本
sd-fuse 使用不同的git分支來(lái)支持不同的內(nèi)核版本, 當(dāng)前支持的內(nèi)核版本為:
- 4.4.y
其他內(nèi)核版本, 請(qǐng)切換到相應(yīng)的git分支
支持的目標(biāo)板OS
- lubuntu
- friendlycore
- friendlycore-arm64
- friendlycore-lite-focal
- friendlycore-lite-focal-arm64
- android
- android7
- friendlywrt
這些OS名稱是分區(qū)鏡像文件存放的目錄名, 在腳本內(nèi)亦有嚴(yán)格定義, 所以不能改動(dòng), 例如要制作friendlycore-arm64的SD固件, 可使用如下命令:
./mk-sd-image.sh friendlycore-arm64
獲得打包固件所需要的素材
制作固件所需要的素材有:
- 內(nèi)核源代碼: 在網(wǎng)盤的 “07_源代碼” 目錄中, 或者從此github鏈接下載, 分支為nanopi2-v4.4.y
- uboot源代碼: 在網(wǎng)盤的 “07_源代碼” 目錄中, 或者從此github鏈接下載, 分支為nanopi2-v2016.01
- 分區(qū)鏡像文件: 在網(wǎng)盤的 “03_分區(qū)鏡像文件” 目錄中, 或者從此http鏈接下載
- 文件系統(tǒng)壓縮包: 在網(wǎng)盤的 “06_文件系統(tǒng)” 目錄中, 或者從此http鏈接下載
如果沒有提前準(zhǔn)備好文件, 腳本亦會(huì)使用wget命令從http server去下載, 不過(guò)因?yàn)閔ttp服務(wù)器帶寬不足的關(guān)系, 速度可能會(huì)比較慢。
腳本功能
- fusing.sh: 將鏡像燒寫至SD卡
- mk-sd-image.sh: 制作SD卡鏡像
- mk-emmc-image.sh: 制作eMMC卡刷固件(SD-to-eMMC)
- build-boot-img.sh: 將指定目錄打包成boot鏡像(boot.img)
- build-rootfs-img.sh: 將指定目錄打包成文件系統(tǒng)鏡像(rootfs.img)
- build-kernel.sh: 編譯內(nèi)核,或內(nèi)核頭文件
- build-uboot.sh: 編譯uboot
如何使用
重新打包SD卡運(yùn)行固件
注: 這里以friendlycore-arm64系統(tǒng)為例進(jìn)行說(shuō)明
下載本倉(cāng)庫(kù)到本地, 然后下載并解壓friendlycore-arm64系統(tǒng)的分區(qū)鏡像文件壓縮包, 由于http服務(wù)器帶寬的關(guān)系, wget命令可能會(huì)比較慢, 推薦從網(wǎng)盤上下載同名的文件:git clone https://github.com/friendlyarm/sd-fuse_s5p6818 -b master sd-fuse_s5p6818 cd sd-fuse_s5p6818 wget http://112.124.9.243/dvdfiles/s5p6818/images-for-eflasher/friendlycore-arm64-images.tgz tar xvzf friendlycore-arm64-images.tgz
解壓后, 會(huì)得到一個(gè)名為friendlycore-arm64的目錄, 可以根據(jù)項(xiàng)目需要, 對(duì)目錄里的文件進(jìn)行修改, 例如把rootfs.img替換成自已修改過(guò)的文件系統(tǒng)鏡像, 或者自已編譯的內(nèi)核和uboot等, 準(zhǔn)備就緒后, 輸入如下命令將系統(tǒng)映像寫入到SD卡 (其中/dev/sdX是你的SD卡設(shè)備名):
sudo ./fusing.sh /dev/sdX friendlycore-arm64
或者, 打包成可用于SD卡燒寫的單一鏡像文件:
./mk-sd-image.sh friendlycore-arm64
命令執(zhí)行成功后, 將生成以下文件, 此文件可燒寫到SD卡運(yùn)行:
out/s5p6818-sd-friendly-core-xenial-4.4-arm64-YYYYMMDD.img
重新打包 SD-to-eMMC 卡刷固件
注: 這里以friendlycore-arm64系統(tǒng)為例進(jìn)行說(shuō)明
下載本倉(cāng)庫(kù)到本地, 然后下載并解壓分區(qū)鏡像文件壓縮包, 這里需要下載friendlycore-arm64和eflasher系統(tǒng)的文件:git clone https://github.com/friendlyarm/sd-fuse_s5p6818 -b master sd-fuse_s5p6818 cd sd-fuse_s5p6818 wget http://112.124.9.243/dvdfiles/s5p6818/images-for-eflasher/friendlycore-arm64-images.tgz tar xvzf friendlycore-arm64-images.tgz wget http://112.124.9.243/dvdfiles/s5p6818/images-for-eflasher/emmc-flasher-images.tgz tar xvzf emmc-flasher-images.tgz
再使用以下命令, 打包卡刷固件, autostart=yes參數(shù)表示使用此固件開機(jī)時(shí),會(huì)自動(dòng)進(jìn)入燒寫流程:
./mk-emmc-image.sh friendlycore-arm64 autostart=yes
命令執(zhí)行成功后, 將生成以下文件, 此文件可燒寫到SD卡運(yùn)行:
out/s5p6818-eflasher-friendly-core-xenial-4.4-arm64-YYYYMMDD.img
定制文件系統(tǒng)
注: 這里以friendlycore-arm64系統(tǒng)為例進(jìn)行說(shuō)明
下載本倉(cāng)庫(kù)到本地, 然后下載并解壓分區(qū)鏡像壓縮包:git clone https://github.com/friendlyarm/sd-fuse_s5p6818 -b master sd-fuse_s5p6818 cd sd-fuse_s5p6818 wget http://112.124.9.243/dvdfiles/s5p6818/images-for-eflasher/friendlycore-arm64-images.tgz tar xvzf friendlycore-arm64-images.tgz
下載文件系統(tǒng)壓縮包并解壓, 需要使用root權(quán)限, 因此解壓命令需要加上sudo:
wget http://112.124.9.243/dvdfiles/s5p6818/rootfs/rootfs-friendlycore.tgz sudo tar xzf rootfs-friendlycore.tgz
可以根據(jù)需要, 對(duì)文件系統(tǒng)目錄進(jìn)行更改, 例如:
sudo sh -c 'echo hello > friendlycore-arm64/rootfs/root/welcome.txt'
用以下命令將文件系統(tǒng)目錄打包成 rootfs.img:
sudo ./build-rootfs-img.sh friendlycore-arm64/rootfs friendlycore-arm64
最后打包成SD卡鏡像文件:
./mk-sd-image.sh friendlycore-arm64
或生成SD-to-eMMC卡刷固件:
./mk-emmc-image.sh friendlycore-arm64
文件系統(tǒng)Tips:
- 可利用debootstrap工具對(duì)文件系統(tǒng)進(jìn)行定制, 預(yù)裝軟件包等
編譯內(nèi)核
注: 這里以friendlycore-arm64系統(tǒng)為例進(jìn)行說(shuō)明
下載本倉(cāng)庫(kù)到本地, 然后下載并解壓分區(qū)鏡像壓縮包:git clone https://github.com/friendlyarm/sd-fuse_s5p6818 -b master sd-fuse_s5p6818 cd sd-fuse_s5p6818 wget http://112.124.9.243/dvdfiles/s5p6818/images-for-eflasher/friendlycore-arm64-images.tgz tar xvzf friendlycore-arm64-images.tgz
從github克隆內(nèi)核源代碼到本地, 用環(huán)境變量KERNEL_SRC來(lái)指定本地源代碼目錄:
export KERNEL_SRC=$PWD/kernel git clone https://github.com/friendlyarm/linux -b nanopi2-v4.4.y --depth 1 ${KERNEL_SRC}
根據(jù)需要配置內(nèi)核:
cd $KERNEL_SRC touch .scmversion make ARCH=arm nanopi3_linux_defconfig make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig # 根據(jù)需要改動(dòng)配置 make ARCH=arm CROSS_COMPILE=arm-linux- savedefconfig cp defconfig ./arch/arm/configs/my_defconfig # 保存配置 my_defconfig git add ./arch/arm/configs/my_defconfig cd -
使用KCFG環(huán)境變量指定內(nèi)核的配置 (KERNEL_SRC指定源代碼目錄), 使用你的配置編譯內(nèi)核:
export KERNEL_SRC=$PWD/kernel export KCFG=my_defconfig ./build-kernel.sh friendlycore-arm64
編譯 u-boot
注: 這里以friendlycore-arm64系統(tǒng)為例進(jìn)行說(shuō)明
下載本倉(cāng)庫(kù)到本地, 然后下載并解壓分區(qū)鏡像壓縮包:git clone https://github.com/friendlyarm/sd-fuse_s5p6818 -b master sd-fuse_s5p6818 cd sd-fuse_s5p6818 wget http://112.124.9.243/dvdfiles/s5p6818/images-for-eflasher/friendlycore-arm64-images.tgz tar xvzf friendlycore-arm64-images.tgz
從github克隆與OS版本相匹配的u-boot源代碼到本地, 環(huán)境變量UBOOT_SRC用于指定本地源代碼目錄:
export UBOOT_SRC=$PWD/uboot git clone https://github.com/friendlyarm/u-boot -b nanopi2-v2016.01 --depth 1 ${UBOOT_SRC} ./build-uboot.sh friendlycore-arm64
Tips: 如何查詢SD卡的設(shè)備文件名
在未插入SD卡的情況下輸入:
ls -1 /dev > ~/before.txt
插入SD卡,輸入以下命令查詢:
ls -1 /dev > ~/after.txt diff ~/before.txt ~/after.txt
安裝交叉編譯器
安裝庫(kù):
apt install liblz4-tool android-tools-fsutils
下載交叉編譯器:
git clone https://github.com/friendlyarm/prebuilts.git -b master --depth 1
在/opt目錄下存放編譯器:
sudo mkdir -p /opt/FriendlyARM/toolchain
將交叉編譯器解壓到/opt目錄下:
Sudo tar xf prebuilts/gcc-x64/aarch64-cortexa53-linux-gnu-6.4.tar.xz -C /opt/FriendlyARM/toolchain/
編譯
編譯準(zhǔn)備
編譯前需要安裝如下軟件包:
#解決menuconfig報(bào)錯(cuò)問(wèn)題
sudo apt-get install build-essential
sudo apt-get install libncurses5-dev
#解決編譯設(shè)備樹報(bào)錯(cuò)問(wèn)題
sudo apt-get install device-tree-compiler
#解決內(nèi)核報(bào)錯(cuò)openssl頭文件找不到
sudo apt-get install libssl-dev
編譯uboot
#參數(shù)根據(jù)自己要編譯的系統(tǒng)而定,build-uboot腳本可能存在一些問(wèn)題,比如指定的uboot源碼路徑在out目錄下,根據(jù)情況自行修改。
./build-uboot.sh friendlycore-arm64
如圖,編譯完成后生成u-boot.bin,腳本使用該文件生成了fip-nonsecure.img,然后將該鏡像更新到系統(tǒng)鏡像目錄用于燒錄。
編譯kernel
#系統(tǒng)類型根據(jù)情況自行修改
./build-kernel.sh friendlycore-arm64
內(nèi)核編譯完成生成boot.img,同時(shí)還會(huì)打包內(nèi)核模塊,重新生成文件系統(tǒng),并且修改分區(qū)表,使用腳本編譯使內(nèi)核編譯工作變得簡(jiǎn)單。
燒錄
燒錄命令:
sudo ./fusing.sh /dev/sdX friendlycore-arm64
指定燒錄的SD卡設(shè)備名,后面跟系統(tǒng)名,即可一鍵燒錄系統(tǒng)
本系列文章硬件使用友善 nanopi fire3