九鼎RK3399筆記一:Linux平台手冊


@

一、git下載九鼎SDK

在ubuntu16中,通過:

git clone https://gitlab.com/9tripod/x3288_linux_new.git
git clone https://gitlab.com/9tripod/x3399_linux_new.git

獲取自己開發板的SDK到Ubuntu中,獲得根目錄x3399_linux_new。

二、安裝所需的軟件包:

1、

sudo apt-get update

2、

sudo apt-get install git gnupg flex bison gperf libsdl1.2-dev libwxgtk3.0-dev build-essential zip curl zlib1g-dev gcc-multilib g++-multilib genromfs libc6-dev-i386 libncurses5-dev x11proto-core-dev libx11-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip gperf lsb-core lib32z1-dev lib32ncurses5-dev lzop liblz4-tool proot libssl1.0.0 libssl-dev genext2fs

三、安裝 kernel 及 u-boot 編譯需要依賴的軟件包

apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip device-tree-compiler

四、安裝文件系統需要依賴的軟件包

apt-get install lib32stdc++-4.9-dev lib32z1

五、安裝 Buildroot 編譯需要依賴的軟件包

apt-get install libfile-which-perl sed make binutils gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc libmpc3 git repo texinfo pkg-config cmake tree

六、編譯uboot

在x3399_linux_new目錄下執行 ./mk.sh -u

編譯uboot后的打印:
--------pack uboot.img--------
load addr is 0x200000!
pack input /test/doc/x3399/x3399_linux_new/u-boot/u-boot.bin
pack file size: 955619
crc = 0xf23a6d50
pack uboot.img success!
pack uboot okay! Input: /test/doc/x3399/x3399_linux_new/u-boot/u-boot.bin
--------pack loader--------
out:rk3399_loader_v1.23.119.bin
fix opt:rk3399_loader_v1.23.119.bin
merge success(rk3399_loader_v1.23.119.bin)
/test/doc/x3399/x3399_linux_new/u-boot
pack loader okay! Input: /test/doc/x3399/x3399_linux_new/rkbin/RKBOOT/RK3399MINIALL.ini
--------pack trust.img--------
out:trust.img
merge success(trust.img)
/test/doc/x3399/x3399_linux_new/u-boot
pack trust okay! Input: /test/doc/x3399/x3399_linux_new/rkbin/RKTRUST/RK3399TRUST.ini
'/test/doc/x3399/x3399_linux_new/u-boot/rk3399_loader_v1.23.119.bin' -> '/test/doc/x3399/x3399_linux_new/output/MiniLoaderAll.bin'
'/test/doc/x3399/x3399_linux_new/u-boot/uboot.img' -> '/test/doc/x3399/x3399_linux_new/output/uboot.img'
'/test/doc/x3399/x3399_linux_new/u-boot/trust.img' -> '/test/doc/x3399/x3399_linux_new/output/trust.img'

七、編譯kernel

x3399_linux_new目錄下執行./mk.sh -k
編譯kernel后的打印:

Pack to resource.img successed! Image: resource.img (with
x3399-linux.dtb logo.bmp logo_kernel.bmp) is ready Image: boot.img
(with Image resource.img) is ready Image: zboot.img (with Image.lz4
resource.img) is ready
'/test/doc/x3399/x3399_linux_new/kernel/boot.img' ->
'/test/doc/x3399/x3399_linux_new/output/boot.img'

7.1 單獨編譯內核的命令:

執行./mk.sh -k等效於執行以下幾個指令:
1、在 x3399_linux_new/kernel/ 執行:

make ARCH=arm64 x3399_linux_defconfig CROSS_COMPILE=aarch64-linux-gnu-
make ARCH=arm64 x3399-linux.img CROSS_COMPILE=aarch64-linux-gnu- -j4

2、在 x3399_linux_new/ 執行:

cp -v kernel/boot.img output/boot.img

最后的boot.img就是燒寫用的鏡像。

7.2 命令解析

對7.1中的指令解析如下:

make ARCH=arm64 x3399-linux.img CROSS_COMPILE=aarch64-linux-gnu- -j4

上面這句指令進行的操作由x3399_linux_new/kernel/arch/arm64/Makefile決定的,等效於:

make rockchip/x3399-linux.dtb kernel.img//make dtb和img

上面這句指令又可以拆為以下3部分指令:

//1
make rockchip/x3399-linux.dts//得到 x3399-linux.dtb

scripts/mkkrnlimg arch/arm64/boot/Image kernel.img//Image打包為kernel.img
//2
scripts/resource_tool /arch/arm64/boot/dts/rockchip/x3399-linux.dtb//打包設備樹和圖片等 生成resource.img
//3
scripts/mkbootimg --kernel arch/arm64/boot/Image --ramdisk ramdisk.img --second resource.img -o boot.img//打包三個鏡像為boot.img

八、編譯recovery

x3399_linux_new目錄下執行./mk.sh -r

九、編譯文件系統

x3399_linux_new目錄下執行 ./mk.sh -b

十、整體一起編譯

x3399_linux_new目錄下執行./mk.sh -a
會編譯出以上所有鏡像。

十一、打包成統一鏡像

x3399_linux_new目錄下執行./mk.sh -U
update-linux.img 為整個 QT 系統升級文件的單一映像,包括了 uboot,內核,文件系統等。
注意,生成 update-linux.img 的先決條件是已經成功編譯了 uboot,內核和 linux 文件系統,缺一不可。

十二、各鏡像含義

MiniLoaderAll.bin:uboot 鏡像文件,復制自 uboot 生成的“loader.bin”文件。

parameter.txt: 分區文件

uboot.img:uboot 鏡像文件,由 uboot 編譯得到的 bin 文件打包得到。

trust.img:uboot 鏡像文件,同樣由 rk 提供的 bin 文件打包得到,uboot.img 和MiniLoaderAll.bin 以及 trust.img 的生成打包過程,有興趣可通過研究編譯腳本理解其原理。

misc.img:分區鏡像,負責啟動模式切換和急救模式的參數傳遞。

recovery.img:急救模式映像。

boot.img:內核鏡像文件,將內核 Image 文件和 resource.img 打包得到,這一點和 Android的 boot.img 不同。

rootfs.img:文件系統分區鏡像,對應 rootfs 分區,這里可燒寫 SDK 編譯得到的 Linux系統,也可燒寫 Ubuntu 或 debian 文件系統等。

oem.img:用於給廠家使用,存放廠家的 APP 或數據。只讀。oem 的生成可參考編譯腳本,生成的源目錄見 SDK 源碼的 device/rockchip/oem/目錄。

userdata.img:存放用戶數據,用戶可將需要的文件放置到 device/rockchip/userdata/目錄下,然后打包燒寫。在板子啟動的系統中,此分區占用剩余的空間。

十三、程序下載

對於燒寫過boot各個鏡像的開發板,可以單獨下載某一part的鏡像。

13.1 進入loader模式

板子開機狀態下,按住VOL+按鍵不松手,再按一下RESET鍵,等到瑞芯微開發工具提示“發現一個LOADER設備”,松開VOL+

在這里插入圖片描述

13.2 設備分區表

點擊“設備分區表”,可獲取板子EMMC存儲鏡像地址信息,也就是分區信息。

13.3 燒寫

點擊路徑后面那一列,選擇你需要燒寫的鏡像,點擊“執行”,會下載鏡像到對應地址中。燒寫完成會自動重啟。


免責聲明!

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



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