前言
瘟疫期间,闲着无聊移植了从www.kernel.org上下载的linux 5.5.3到st的stm32f429-discovery和大升电气的am4372平台上。
大部分时间是在修改dts和menuconfig的配置,可见主线内核代码对大部分的开发平台已经做到了完美的支持,不久的未来应该可以绕过原厂,直接拿主线代码来商用了。
硬件平台介绍
大升的板子是以前为他们做bsp维护时遗留下来的,核心板链接见https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17385140682.20.2fa11151Revp1b&id=566304029954,底板目前应该是不再生产了。底板具体资源有800×480的dpi接口的lcd,触摸屏,sd卡,ov2659/ov5640接口,usb host,usb device(用来做dfu升级很方便),调试串口uart0,千兆网口,485,can各一个,rtc锂电池电源。
由于没有核心板的原理图,核心板上本有一个led灯用heart功能的,暂时没有用起来。核心板的资源是800Mhz的am4372,512M的ddr内存两颗,4GB的emmc。ar8035 phy芯片。
TODO:
移植最新的u-boot,使用Buildroot工具制作ubifs的filesystem替换原有argo的文件系统,通过video来的数据做一些人脸识别,跟踪等。跑一些常用的gstreamer方面的远程监控的脚本。
修改细节
编译工具 www.linaro.org上下载https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
编译内核
制作its文件用于打包zImage和dtb到am4372.itb
/*
* Simple U-Boot uImage source file containing a single kernel and FDT blob
*/
/dts-v1/;
/ {
description = "Simple image with single Linux kernel and FDT blob";
#address-cells = <1>;
images {
kernel {
description = "Vanilla Linux kernel";
data = /incbin/("./kernel-am4372/arch/arm/boot/zImage");
type = "kernel";
arch = "arm";
os = "linux";
compression = "none";
load = <0x80008000>;
entry = <0x80008000>;
hash-1 {
algo = "crc32";
};
hash-2 {
algo = "sha1";
};
};
fdt-1 {
description = "Flattened Device Tree blob";
data = /incbin/("./kernel-am4372/arch/arm/boot/dts/am437x-gp-evm.dtb");
type = "flat_dt";
arch = "arm";
compression = "none";
hash-1 {
algo = "crc32";
};
hash-2 {
algo = "sha1";
};
};
};
configurations {
default = "conf-1";
conf-1 {
description = "Boot Linux kernel with FDT blob";
kernel = "kernel";
fdt = "fdt-1";
};
};
};
安装dfu工具用于通过usb device下载am4372.itb到0x82000000调试内核
dts修改点
diff --git a/arch/arm/boot/dts/am437x-gp-evm.dts b/arch/arm/boot/dts/am437x-gp-evm.dts
index 811c8ca..15d34c7 100644
--- a/arch/arm/boot/dts/am437x-gp-evm.dts
+++ b/arch/arm/boot/dts/am437x-gp-evm.dts
@@ -16,9 +16,9 @@
model = "TI AM437x GP EVM";
compatible = "ti,am437x-gp-evm","ti,am4372","ti,am43";
- aliases {
+ /*aliases {
display0 = &lcd0;
- };
+ };*/
chosen {
stdout-path = &uart0;
@@ -52,14 +52,16 @@
enable-active-high;
};
- lcd_bl: backlight {
+ backlight {
compatible = "pwm-backlight";
pwms = <&ecap0 0 50000 PWM_POLARITY_INVERTED>;
brightness-levels = <0 51 53 56 62 75 101 152 255>;
- default-brightness-level = <8>;
+ default-brightness-level = <7>;
};
+
matrix_keypad: matrix_keypad0 {
+ status = "disabled";
compatible = "gpio-matrix-keypad";
debounce-delay-ms = <5>;
col-scan-delay-us = <2>;
@@ -85,35 +87,14 @@
0x0201006c>; /* DOWN */
};
- lcd0: display {
- compatible = "osddisplays,osd070t1718-19ts", "panel-dpi";
- label = "lcd";
-
-