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 這個文件,整個過程完成