修改rv1126/1109内核设备树流程

修改rv1126/1109内核设备树流程:

以修改串口2(调试串口ttyFIQ0)为例:

1,打开内核设备树所在目录路径为:SDK/kernel/arch/arm/boot/dts目录下:

主要有关的本设备RV1126的有关设备树为rv1126.dtsi,rv1126-firefly-rk809.dtsi,rv1126-pinctrl.dtsi,rv1126-firefly-jd4.dtsi,rv1126-firefly-jd4.dts

2,与串口2有关的设备树文件为,rv1126-firefly-jd4.dtsi,其中启动参数有:

chosen {
	bootargs = "earlycon=uart8250,mmio32,0xff570000 console=ttyFIQ0 ro root=PARTLABEL=rootfs rootfstype=ext4 rootwait overlayroot=device:dev=PARTLABEL=userdata,fstype=ext4,mkfs=1 cgroup_enable=memory swapaccount=1 snd_aloop.index=7";
};

其中0xff570000就是uart2的地址

uart2: serial@0xff570000

设置了console使用节点ttyFIQ0

console=ttyFIQ0

而ttyFIQ0的节点对应的设备树文件为:rv1126.dtsi,其中

fiq_debugger: fiq-debugger {
	compatible = "rockchip,fiq-debugger";
	rockchip,serial-id = <2>;
	rockchip,wake-irq = <0>;
	rockchip,irq-mode-enable = <0>;
	rockchip,baudrate = <1500000>;  /* Only 115200 and 1500000 */
	interrupts = <GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>;
	status = "disabled";
};

其中的第3,6行为关注的重点,意义如下:

rockchip,serial‐id = <2>;    /*设置串口id,想换不同的串口就改这个ID*/
rockchip,baudrate = <xxx>; /* 波特率,只能115200或者1500000 */

该节点驱动加载后会注册/dev/ttyFIQ0设备,需要注意的是rockchip,serial-id即便改了,注册的也是ttyFIQ0;所以如果要将调试串口改成其它串口,比如uart4,只需要fiq的dts和bootargs,内核日志就将在uart4上输出

#rv1126.dtsi
rockchip,serial-id = <4>;
pinctrl-0 = <&uart4m0_xfer>;
#rv1126-firefly-jd4.dtsi
bootargs = "earlycon=uart8250,mmio32,ff590000";

并且在文件rv1126-firefly-rk809.dtsi中可以看到使能了该节点:

&fiq_debugger {
	status = "okay";
};

因此修改调试串口波特率即修改fiq节点中的rockchip,baudrate即可,改为115200.

注意,调用修改其他串口或I2C驱动可以直接在rv1126-firefly-jd4.dts下追加节点即可,如下如示:

&i2c1 {
	//clocks = <&cru CLK_I2C1>, <&cru PCLK_I2C1>;
	//pinctrl-0 = <&i2c1_xfer>;
	status = "okay";
    ssd1306: ssd1306@3c {
			  compatible = "ssd1306";
              reg = <0x3c>;
              screen_max_x = <128>;
              screen_max_y = <64>;
      };
};

&uart1 {
       current-speed = <9600>;
       no-loopback-test;
       status = "okay";
};

修改完毕后,保存设置。进入sdk目录下,

cd sdk

然后编译内核即可,输入命令:

./build.sh kernel

注意,若是只修改设备树,则编译内核将十分迅速。

然后,在目录sdk/kernel下找到zboot.img,此即为编译完成的内核及设备树文件。拷贝在window某一目录下即可。

打开瑞芯微下载工具AndroidTool中Androidtool.exe,将开发板与电脑同时以双USB公对公线连接后运行,若是打开开发工具后,最下面显示是发现一个ADB设备,则点击切换按扭,切换设备到发现一个Loader设备。

之后,右键空白区域,输入导入设备分区表,找到原厂给的一个设备分区表文件aio-rv1126-jd4-ipc,一般rv1126的设备分区表设置基本一致。

只点击boot,并输入Boot所在的文件夹的地址路径即可。

之后点击执行按扭。

在打开串口工具,找到CH340注册的端口,并输入波特率为115200,即可打开终端调试。

注:有两个小问题,1,打开串口后,其中的uboot打印参数是乱码,推测是uboot启动串口2波特率1500000与改后的内核串口2波特率115200不一致.

2.每次输入reboot重启后,当快要进入终端时,总是会卡在一个ntp同步时间的指令上,可以关闭打开的窗口再重新打开,但是这个问题根本问题仍没有解决。

问题解决方法:

推测为更改波特率为1500000时所带来的系统重新启动未知bug,可以重新改回1500000波特率解决。

参考文章:
https://github.com/54shady/kernel_drivers_examples/blob/Firefly_RK3399/debug/uart/README.md

posted @ 2022-03-27 14:03  Deceiver_Ker  阅读(4700)  评论(0编辑  收藏  举报