无需编译整个buildroot,瑞芯微RK3399内核编译快速上手
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 这个文件,整个过程完成