無需編譯整個buildroot,瑞芯微RK3399內核編譯快速上手

軟核改造祝融叔 發佈 2022-09-27T19:54:15.646774+00:00

RK3399 的 Linux SDK採用是buildroot 結構,也就是所有可能需要軟體包,文件系統,內核核都放這個目錄,有點Androdi framework那意思,但是完整編譯一次要麻煩,如果你只是簡單調整一下內核,來試一下我說的流程.

RK3399 的 linux SDK採用是buildroot 結構,也就是所有可能需要軟體包,文件系統,內核核都放這個目錄,有點Androdi framework那意思,但是完整編譯一次要麻煩,如果你只是簡單調整一下內核,來試一下我說的流程.

 下面以打開firefly 3399中spi2 驅動為例來演示內核編譯流程.這是linux SDK的buildroot 結構,可以看到內核目錄kernel,整個目錄大部分操作由buildroot.sh來控制


在這個硬體上拉出了spi2的接口,但是在驅動上把其它當串口4,如果想用它做spi通訊需要把driver加載上。


導入對應開發板的內核配置


不同開發板有不同硬體定義,通常開發板生產商已經定義好,如果已經配置好跳過這一步,

以aio-rk3399j為例

./build.sh aio-3399j-lvds-buildroot.mk

這個如果報錯,直接按如下連結用ln -s 即可

這個操作將會把 device/rockchip/.BoardConfig.mk 指向對應開發板配置,可以用ll驗證一下

這裡注意有兩個關鍵的定義,這是內核配置文件 

export RK_KERNEL_DEFCONFIG=firefly_Linux_defconfig

另外是一個設備樹文件,用生成內核數據 

    export RK_KERNEL_DTS=rk3399-firefly-aio-lvds


在查看內核配置

在內核目錄運行,如果在上一步導入,一般不需要修改的。

make menuconfig

按/進行搜索 CONFIG_SPI_ROCKCHIP,如果=y表示已經集成了,通常只要板型對一定有的



關鍵一步 關修改設備樹文件DTS

dts是Linux 2.6引入,你可以理解為是Linux 內核中各個驅動統一配置文件 這裡增刪驅動的關鍵文件。 rockship的板子這一些文件都放在

arch/arm64/boot/dts/rockchip

rk3399-firefly-aioc-ai-lvds.dts中第一句引用公用的

#include "rk3399-firefly-aioc.dtsi"

其中spi2定義就在這文件里,這裡要把uart4關掉,把spi2打開,並加上spidev驅動

&spi2 {
status = "okay";
max-freq = <48000000>;
spidev@00 {
compatible = "linux,spidev";
reg = <0x00>;
spi-max-frequency = <48000000>;
};
};

&uart4 {
    status = "disabled";
};


編譯內核

或者到kernel 目錄下,直接make


這裡未壓縮的boot.img即是所需的燒錄內核文件,我這裡編譯出來32.1M


燒錄內核

aio 3399 燒錄線採用usb type-c ,燒錄是插板止唯一的 usb type-c 接口上,燒錄的開關是recovery 鍵,在電源鍵邊上一個小按鍵

操作後

先斷開電源適配器連接:

USB 一端連接主機,Type-C 一端連接開發板 Type-C 母口

按住設備上的 RECOVERY (恢復)鍵並保持/home/hxy/project

接上電源

大約兩秒鐘後,鬆開 RECOVERY 鍵

正常情況下,電源led是亮的,但recovery 模式下不會亮,是否進入燒錄狀態運行升級工具即可,

因此這裡只燒錄內核,所以執行如下命令燒錄內核分區即可

sudo ./upgrade_tool di -boot boot.img

重啟後在系統中會看到

/dev/spidev.xxxx 這個文件,整個過程完成

關鍵字: