前言

瘟疫期间,闲着无聊移植了从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

编译内核

mkdir ../kernel-am4372
make O=../kernel-am4372 omap2plus_defconfig
time make O=../kernel-am4372 zImage dtbs modules LOADADDR=0x80008000
错误 linux-5.5.3/scripts/extract-cert.c:21:25: fatal error: openssl/bio.h: No such file or directory
解决 sudo apt-get install libssl-dev

制作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";
};
};
};

mkimage -f am4372.its am4372.itb

安装dfu工具用于通过usb device下载am4372.itb到0x82000000调试内核

git clone git://git.code.sf.net/p/dfu-util/dfu-util
cd dfu-util/
sudo apt-get build-dep dfu-util
sudo apt-get install libusb-1.0-0-dev
./autogen.sh 
./configure
make
设备端
setenv dfu_alt_info 'itb ram 0x82000000 0x4000000'
dfu 0 ram 0
host端
sudo ../dfu-util/src/dfu-util -d 0403:bd00 -a itb -D ../am4372.itb

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";
-
-               backlight = <&lcd_bl>;
-
-               panel-timing {
-                       clock-frequency = <33000000>;
-                       hactive = <800>;
-                       vactive = <480>;
-                       hfront-porch = <210>;
-                       hback-porch = <16>;
-                       hsync-len = <30>;
-                       vback-porch = <10>;
-                       vfront-porch = <22>;
-                       vsync-len = <13>;
-                       hsync-active = <0>;
-                       vsync-active = <0>;
-                       de-active = <1>;
-                       pixelclk-active = <1>;
-               };
-
+       panel {
+               compatible = "osddisplays,osd057T0559-34ts";port {
-                       lcd_in: endpoint {
+                       panel_in: endpoint {remote-endpoint = <&dpi_out>;};};};
-/* fixed 12MHz oscillator */refclk: oscillator {#clock-cells = <0>;
@@ -162,13 +143,24 @@pinctrl-1 = <&beeper_pins_sleep>;gpios = <&gpio4 12 GPIO_ACTIVE_HIGH>;};
+
+       audio_mstrclk: mclk_osc {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <12000000>;
+       };};&am43xx_pinmux {pinctrl-names = "default", "sleep";
-       pinctrl-0 = <&wlan_pins_default &ddr3_vtt_toggle_default &unused_pins &debugss_pins>;
+       pinctrl-0 = <&wlan_pins_default &ddr3_vtt_toggle_default &unused_pins &debugss_pins &clkout2_pin>;pinctrl-1 = <&wlan_pins_sleep>;
-
+
+       clkout2_pin: clkout2_pin {
+               pinctrl-single,pins = <
+                       0x274 (PIN_OUTPUT_PULLUP | MUX_MODE3)
+               >;
+       };ddr3_vtt_toggle_default: ddr_vtt_toggle_default {pinctrl-single,pins = <0x25C (DS0_PULL_UP_DOWN_EN | PIN_OUTPUT_PULLUP | DS0_FORCE_OFF_MODE | MUX_MODE7) /* spi0_cs0.gpio5_7 */
@@ -178,7 +170,7 @@i2c0_pins: i2c0_pins {pinctrl-single,pins = <AM4372_IOPAD(0x988, PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)  /* i2c0_sda.i2c0_sda */
-                       AM4372_IOPAD(0x98c, PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)  /* i2c0_scl.i2c0_scl */
+                       AM4372_IOPAD(0x98c, PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)  /*i2c0_scl.i2c0_scl */>;};@@ -281,14 +273,6 @@dss_pins: dss_pins {pinctrl-single,pins = <
-                       AM4372_IOPAD(0x820, PIN_OUTPUT_PULLUP | MUX_MODE1) /*gpmc ad 8 -> DSS DATA 23 */
-                       AM4372_IOPAD(0x824, PIN_OUTPUT_PULLUP | MUX_MODE1)
-                       AM4372_IOPAD(0x828, PIN_OUTPUT_PULLUP | MUX_MODE1)
-                       AM4372_IOPAD(0x82c, PIN_OUTPUT_PULLUP | MUX_MODE1)
-                       AM4372_IOPAD(0x830, PIN_OUTPUT_PULLUP | MUX_MODE1)
-                       AM4372_IOPAD(0x834, PIN_OUTPUT_PULLUP | MUX_MODE1)
-                       AM4372_IOPAD(0x838, PIN_OUTPUT_PULLUP | MUX_MODE1)
-                       AM4372_IOPAD(0x83c, PIN_OUTPUT_PULLUP | MUX_MODE1) /*gpmc ad 15 -> DSS DATA 16 */AM4372_IOPAD(0x8a0, PIN_OUTPUT_PULLUP | MUX_MODE0) /* DSS DATA 0 */AM4372_IOPAD(0x8a4, PIN_OUTPUT_PULLUP | MUX_MODE0)AM4372_IOPAD(0x8a8, PIN_OUTPUT_PULLUP | MUX_MODE0)
@@ -493,14 +477,14 @@emmc_pins_default: emmc_pins_default {pinctrl-single,pins = <
-                       AM4372_IOPAD(0x800, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad0.mmc1_dat0 */
-                       AM4372_IOPAD(0x804, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad1.mmc1_dat1 */
-                       AM4372_IOPAD(0x808, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad2.mmc1_dat2 */
-                       AM4372_IOPAD(0x80c, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad3.mmc1_dat3 */
-                       AM4372_IOPAD(0x810, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad4.mmc1_dat4 */
-                       AM4372_IOPAD(0x814, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad5.mmc1_dat5 */
-                       AM4372_IOPAD(0x818, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad6.mmc1_dat6 */
-                       AM4372_IOPAD(0x81c, PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad7.mmc1_dat7 */
+                       AM4372_IOPAD(0x820, PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_ad0.mmc1_dat0 */
+                       AM4372_IOPAD(0x824, PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_ad1.mmc1_dat1 */
+                       AM4372_IOPAD(0x828, PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_ad2.mmc1_dat2 */
+                       AM4372_IOPAD(0x82c, PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_ad3.mmc1_dat3 */
+                       AM4372_IOPAD(0x830, PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_ad4.mmc1_dat4 */
+                       AM4372_IOPAD(0x834, PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_ad5.mmc1_dat5 */
+                       AM4372_IOPAD(0x838, PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_ad6.mmc1_dat6 */
+                       AM4372_IOPAD(0x83c, PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_ad7.mmc1_dat7 */AM4372_IOPAD(0x880, PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn1.mmc1_clk */AM4372_IOPAD(0x884, PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn2.mmc1_cmd */>;
@@ -508,14 +492,14 @@emmc_pins_sleep: emmc_pins_sleep {pinctrl-single,pins = <
-                       AM4372_IOPAD(0x800, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad0.gpio1_0 */
-                       AM4372_IOPAD(0x804, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad1.gpio1_1 */
-                       AM4372_IOPAD(0x808, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad2.gpio1_2 */
-                       AM4372_IOPAD(0x80c, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad3.gpio1_3 */
-                       AM4372_IOPAD(0x810, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad4.gpio1_4 */
-                       AM4372_IOPAD(0x814, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad5.gpio1_5 */
-                       AM4372_IOPAD(0x818, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad6.gpio1_6 */
-                       AM4372_IOPAD(0x81c, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad7.gpio1_7 */
+                       AM4372_IOPAD(0x820, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad0.gpio1_0 */
+                       AM4372_IOPAD(0x824, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad1.gpio1_1 */
+                       AM4372_IOPAD(0x828, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad2.gpio1_2 */
+                       AM4372_IOPAD(0x82c, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad3.gpio1_3 */
+                       AM4372_IOPAD(0x830, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad4.gpio1_4 */
+                       AM4372_IOPAD(0x834, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad5.gpio1_5 */
+                       AM4372_IOPAD(0x838, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad6.gpio1_6 */
+                       AM4372_IOPAD(0x83c, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad7.gpio1_7 */AM4372_IOPAD(0x880, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_csn1.gpio1_30 */AM4372_IOPAD(0x884, PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_csn2.gpio1_31 */>;
@@ -712,13 +696,13 @@ov2659@30 {compatible = "ovti,ov2659";reg = <0x30>;
-
-               clocks = <&refclk 0>;
+               status = "okay";
+               clocks = <&clkout2_ck>;clock-names = "xvclk";ov2659/ov5640使用am4372出来的clkout2作为主时钟port {
-                       ov2659_0: endpoint {
-                               remote-endpoint = <&vpfe1_ep>;
+                       ov2659_1: endpoint {
+                               remote-endpoint = <&vpfe0_ep>;link-frequencies = /bits/ 64 <70000000>;};};
@@ -726,7 +710,7 @@};&i2c1 {
-       status = "okay";
+       status = "disabled";pinctrl-names = "default";pinctrl-0 = <&i2c1_pins>;pixcir_ts@5c {
@@ -754,12 +738,12 @@compatible = "ovti,ov2659";reg = <0x30>;-               clocks = <&refclk 0>;
+               clocks = <&audio_mstrclk>;clock-names = "xvclk";port {
-                       ov2659_1: endpoint {
-                               remote-endpoint = <&vpfe0_ep>;
+                       ov2659_0: endpoint {
+                               remote-endpoint = <&vpfe1_ep>;link-frequencies = /bits/ 64 <70000000>;};};
@@ -800,8 +784,7 @@&gpio0 {pinctrl-names = "default";pinctrl-0 = <&gpio0_pins>;
-       status = "okay";
-
+       status = "disabled";p23 {gpio-hog;gpios = <23 GPIO_ACTIVE_HIGH>;
@@ -821,10 +804,6 @@status = "okay";};-&gpio3 {
-       status = "okay";
-};
-&gpio4 {status = "okay";};
@@ -863,7 +842,7 @@* When enabling eMMC, disable GPMC/NAND and set* SelEMMCorNAND to output-high*/
-       status = "disabled";
+       status = "okay";vmmc-supply = <&evm_v3_3d>;bus-width = <8>;pinctrl-names = "default", "sleep";
@@ -873,7 +852,7 @@};&mmc3 {
-       status = "okay";
+       status = "disabled";/* these are on the crossbar and are outlined in thexbar-event-map element */dmas = <&edma_xbar 30 0 1>,
@@ -937,7 +916,7 @@status = "okay";ethphy0: ethernet-phy@0 {
-               reg = <0>;
+               reg = <4>;};};@@ -955,7 +934,7 @@* When enabling GPMC, disable eMMC and set* SelEMMCorNAND to output-low*/
-       status = "okay";
+       status = "disabled";pinctrl-names = "default";pinctrl-0 = <&nand_flash_x8>;ranges = <0 0 0x08000000 0x01000000>;   /* CS0 space. Min partition = 16MB */
@@ -1047,8 +1026,8 @@port {dpi_out: endpoint {
-                       remote-endpoint = <&lcd_in>;
-                       data-lines = <24>;
+                       remote-endpoint = <&panel_in>;
+                       data-lines = <16>;};};};@@ -915,14 +921,14 @@pinctrl-1 = <&davinci_mdio_sleep>;status = "okay";-       ethphy0: ethernet-phy@0 {
+       ethphy0: ethernet-phy@4 {reg = <4>;};};&cpsw_emac0 {phy-handle = <?phy0>;
-       phy-mode = "rgmii";
+       phy-mode = "rgmii-id";};

添加clkout2的dts配置和ov的驱动中对clk的使用

diff --git a/arch/arm/boot/dts/am43xx-clocks.dtsi b/arch/arm/boot/dts/am43xx-clocks.dtsi
index 091356f..31760ef 100644
--- a/arch/arm/boot/dts/am43xx-clocks.dtsi
+++ b/arch/arm/boot/dts/am43xx-clocks.dtsi
@@ -704,6 +704,42 @@ti,bit-shift = <8>;reg = <0x2a48>;};
+
+       clkout2_src_mux_ck: clkout2_src_mux_ck {
+               #clock-cells = <0>;
+               compatible = "ti,mux-clock";
+               clocks = <&clk_rc32k_ck>, <&sysclk_div>, <&dpll_ddr_m2_ck>,
+                        <&dpll_per_m2_ck>, <&dpll_disp_m2_ck>,
+                        <&dpll_mpu_m2_ck>, <&dpll_extdev_ck>;
+               reg = <0x4108>;
+       };
+
+       clkout2_pre_div_ck: clkout2_pre_div_ck {
+               #clock-cells = <0>;
+               compatible = "ti,divider-clock";
+               clocks = <&clkout2_src_mux_ck>;
+               ti,bit-shift = <4>;
+               ti,max-div = <8>;
+               reg = <0x4108>;
+       };
+
+       clkout2_post_div_ck: clkout2_post_div_ck {
+               #clock-cells = <0>;
+               compatible = "ti,divider-clock";
+               clocks = <&clkout2_pre_div_ck>;
+               ti,bit-shift = <8>;
+               ti,max-div = <32>;
+               ti,index-power-of-two;
+               reg = <0x4108>;
+       };
+
+       clkout2_ck: clkout2_ck {
+               #clock-cells = <0>;
+               compatible = "ti,gate-clock";
+               clocks = <&clkout2_post_div_ck>;
+               ti,bit-shift = <16>;
+               reg = <0x4108>;
+       };};&prcm {diff --git a/drivers/media/i2c/ov2659.c b/drivers/media/i2c/ov2659.c
index 42f6417..e1bcf20 100644
--- a/drivers/media/i2c/ov2659.c
+++ b/drivers/media/i2c/ov2659.c
@@ -1420,6 +1420,46 @@ static int ov2659_detect(struct v4l2_subdev *sd)return pdata;}+void set_clk_24m(struct i2c_client *client, struct clk *clk)
+{
+       struct clk *clkout2_src_mux_ck;
+       struct clk *clkout2_pre_div_ck;
+       struct clk *dpll_per_m2_ck;
+       struct clk *clkout2_post_div_ck;
+
+       clkout2_src_mux_ck = devm_clk_get(&client->dev, "clkout2_src_mux_ck");
+       if (IS_ERR(clkout2_src_mux_ck)) {
+               dev_err(&client->dev, "Could not get clkout2_src_mux_ck clock\n");
+               return;
+       }
+
+       dpll_per_m2_ck = devm_clk_get(&client->dev, "dpll_per_m2_ck");
+       if (IS_ERR(dpll_per_m2_ck)) {
+               dev_err(&client->dev, "Could not get dpll_per_m2_ck clock\n");
+               devm_clk_put(&client->dev, clkout2_src_mux_ck);
+               return;
+       }
+       clk_set_parent(clkout2_src_mux_ck, dpll_per_m2_ck);
+       devm_clk_put(&client->dev, dpll_per_m2_ck);
+       devm_clk_put(&client->dev, clkout2_src_mux_ck);
+
+       clkout2_pre_div_ck = clk_get(&client->dev, "clkout2_pre_div_ck");
+       if (IS_ERR(clkout2_pre_div_ck)) {
+               dev_err(&client->dev, "Could not get clkout2_pre_div_ck\n");
+               return;
+       }
+
+       clkout2_post_div_ck = clk_get(&client->dev, "clkout2_post_div_ck");
+       if (IS_ERR(clkout2_post_div_ck)) {
+               dev_err(&client->dev, "Could not get clkout2_post_div_ck\n");
+               clk_put(clkout2_pre_div_ck);
+               return;
+       }
+
+       clk_set_rate(clkout2_pre_div_ck, 96000000);
+       clk_set_rate(clkout2_post_div_ck, 24000000);
+       clk_prepare_enable(clk);
+}static int ov2659_probe(struct i2c_client *client){const struct ov2659_platform_data *pdata = ov2659_get_pdata(client);
@@ -1444,6 +1484,7 @@ static int ov2659_probe(struct i2c_client *client)if (IS_ERR(clk))return PTR_ERR(clk);+       set_clk_24m(client, clk);ov2659->xvclk_frequency = clk_get_rate(clk);if (ov2659->xvclk_frequency < 6000000 ||ov2659->xvclk_frequency > 27000000)

添加lcd

diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index 5d48768..2b24aa1 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -2728,6 +2728,32 @@ static void panel_simple_shutdown(struct device *dev)| DRM_BUS_FLAG_SHARP_SIGNALS,};+static const struct display_timing osddisplays_osd057T0559_34ts_timing = {
+       .pixelclock = { 36000000, 36000000, 36000000 },
+       .hactive = { 800, 800, 800 },
+       .hfront_porch = { 20, 20, 20 },
+       .hback_porch = { 40, 40, 40 },
+       .hsync_len = { 2, 2, 2 },
+       .vactive = { 480, 480, 480 },
+       .vfront_porch = { 11, 11, 11 },
+       .vback_porch = { 32, 32, 32 },
+       .vsync_len = { 17, 17, 17 },
+       .flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW,
+};
+
+static const struct panel_desc osddisplays_osd057T0559_34ts = {
+       .timings = &osddisplays_osd057T0559_34ts_timing,
+       .num_timings = 1,
+       .bpc = 6,
+       .size = {
+               .width = 42,
+               .height = 28,
+       },
+       .bus_format = MEDIA_BUS_FMT_RGB565_1X16,
+       .bus_flags = DRM_BUS_FLAG_DE_HIGH
+                  | DRM_BUS_FLAG_PIXDATA_POSEDGE,
+};
+static const struct drm_display_mode shelly_sca07010_bfn_lnn_mode = {.clock = 33300,.hdisplay = 800,
@@ -3369,6 +3395,9 @@ static void panel_simple_shutdown(struct device *dev).compatible = "sharp,ls020b1dd01d",.data = &sharp_ls020b1dd01d,}, {
+               .compatible = "osddisplays,osd057T0559-34ts",
+               .data = &osddisplays_osd057T0559_34ts,
+       }, {.compatible = "shelly,sca07010-bfn-lnn",.data = &shelly_sca07010_bfn_lnn,}, {

添加触摸屏

diff --git a/arch/arm/boot/dts/am437x-gp-evm.dts b/arch/arm/boot/dts/am437x-gp-evm.dts
index 15d34c7..540de09 100644
--- a/arch/arm/boot/dts/am437x-gp-evm.dts
+++ b/arch/arm/boot/dts/am437x-gp-evm.dts
@@ -769,9 +769,15 @@&tscadc {status = "okay";
+       tsc {
+               ti,wires = <4>;
+               ti,x-plate-resistance = <200>;
+               ti,coordiante-readouts = <5>;
+               ti,wire-config = <0x00 0x11 0x22 0x33>;
+       };adc {
-               ti,adc-channels = <0 1 2 3 4 5 6 7>;
+               ti,adc-channels = <4 5 6 7>;};};

添加can的支持

正常来讲can是不需要作额外改动来支持的,只需要dts中加入dcan的okay配置和kernel 的config中加入以下内容即可,但是做am4372平台的仁兄似乎忘记了将am335x-l4.dtsi里关于dcan时钟的配置移植到am437x-l4.dtsi中,导致驱动加载时挂在clk的enable上面。

[*] Networking support -><*|M> CAN bus subsystem support -><*|M> Raw CAN Protocol (raw access with CAN-ID filtering)<*|M> Broadcast Manager CAN Protocol (with content filtering)<*|M> CAN Gateway/Router (with netlink configuration)CAN Device Drivers -><*|M>   Platform CAN drivers with Netlink support[*]     CAN bit-timing calculation<*|M>   Bosch C_CAN/D_CAN devices -><M> Generic Platform Bus based C_CAN/D_CAN driver
diff --git a/arch/arm/boot/dts/am437x-l4.dtsi b/arch/arm/boot/dts/am437x-l4.dtsi
index 0dd59ee..f23eee2 100644
--- a/arch/arm/boot/dts/am437x-l4.dtsi
+++ b/arch/arm/boot/dts/am437x-l4.dtsi
@@ -1558,8 +1558,9 @@reg-names = "rev";ti,hwmods = "d_can0";/* Domains (P, C): per_pwrdm, l4ls_clkdm */
-                       clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN0_CLKCTRL 0>;
-                       clock-names = "fck";
+                       clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN0_CLKCTRL 0>,
+                                        <&dcan0_fck>;
+                       clock-names = "fck","osc";#address-cells = <1>;#size-cells = <1>;ranges = <0x0 0xcc000 0x2000>;
@@ -1567,6 +1568,8 @@dcan0: can@0 {compatible = "ti,am4372-d_can", "ti,am3352-d_can";reg = <0x0 0x2000>;
+                               clocks = <&dcan0_fck>;
+                               clock-names = "fck";syscon-raminit = <&scm_conf 0x644 0>;interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;status = "disabled";
@@ -1579,8 +1582,9 @@reg-names = "rev";ti,hwmods = "d_can1";/* Domains (P, C): per_pwrdm, l4ls_clkdm */
-                       clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN1_CLKCTRL 0>;
-                       clock-names = "fck";
+                       clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN1_CLKCTRL 0>,
+                                        <&dcan1_fck>;
+                       clock-names = "fck","osc";#address-cells = <1>;#size-cells = <1>;ranges = <0x0 0xd0000 0x2000>;
@@ -1588,6 +1592,8 @@dcan1: can@0 {compatible = "ti,am4372-d_can", "ti,am3352-d_can";reg = <0x0 0x2000>;
+                               clocks = <&dcan1_fck>;
+                               clock-name = "fck";syscon-raminit = <&scm_conf 0x644 1>;interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;status = "disabled";

简单验证

iperf test network bandwidth performance
Host$ iperf -s 192.168.1.102 -w 163840
Client# iperf -c 192.168.1.102
Client connecting to 192.168.1.102, TCP port 5001
TCP window size: 43.8 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.105 port 58480 connected with 192.168.1.102 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   113 MBytes  94.4 Mbits/seccan test
root@am437x-evm:~# ifconfig -a
can0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  NOARP  MTU:16  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:10 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)Interrupt:79 can1      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  NOARP  MTU:16  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:10 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)Interrupt:80 eth0      Link encap:Ethernet  HWaddr A8:1B:6A:CF:7D:94  inet addr:192.168.1.105  Bcast:192.168.1.255  Mask:255.255.255.0inet6 addr: fe80::aa1b:6aff:fecf:7d94%763612/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:994461 errors:0 dropped:0 overruns:0 frame:0TX packets:681796 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:1068184453 (1018.6 MiB)  TX bytes:762418962 (727.0 MiB)lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1%763612/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:181 errors:0 dropped:0 overruns:0 frame:0TX packets:181 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:13828 (13.5 KiB)  TX bytes:13828 (13.5 KiB)sit0      Link encap:IPv6-in-IPv4  NOARP  MTU:1480  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

移植Linux 5.5.3 到 TI AM4372平台相关推荐

  1. 在mtk移植个linux内核,移植 Linux Kernel 造成無法開機之解決方案以及除錯工具

    一般在以下情況, 我們會進行移植 Linux Kernel 的動作. 1. 將新版 Linux Kernel 移植到全新 SoC 上 開發人員為 SoC 廠商(e.g. MTK, TI, Allwin ...

  2. 为AM335x移植Linux内核主线代码——了解dts

    问题一:以前的Linux Kernel如何描述硬件,现在又如何描述呢? 在以前的内核版本中: 1)内核包含了对硬件的全部描述: 2)bootloader会加载一个二进制的内核镜像,并执行它,比如uIm ...

  3. ZYNQ跑系统 系列(一) 传统方式移植linux

    移植linux之传统方式 在ZYNQ开发时,有些情况下,为了降低开发的复杂性,或是提升系统运行的性能,在ARM上跑一个linux系统往往是一个不错的选择,而且linux系统一般集成了一些常用的成熟驱动 ...

  4. 挑战 Linux 之父认为的“不可能”:向 M1 Mac 移植 Linux

    整理 | 郑丽媛 头图 | CSDN下载自东方 IC 上个月苹果发布会推出的首款自研芯片 M1 ,不仅吸引了国内外评测技术网站对其性能的关注,更是在开发者的圈子内引起了轩然大波--换芯导致的生态迁移问 ...

  5. jquery程序 windows移植到linux显示不了,windows程序移植linux

    1,路径名统一用正斜杠"/".(windows下正反斜杠都识别,linux只认正斜杠.) 2,统一使用UTF-8格式编码. vim中无法保存汉字时,可输入下列命令: :set fi ...

  6. 【ARM】一步一步移植Linux Kernel 2.6.13到板子

    1环境搭建所需材料 2环境搭建所需材料之间的关系 3所使用的开发板 4译内核 1修改makefile 2拷贝配置文件 3编译得到zImage 4把zImage转成uImage 5开发板串口连接 6ub ...

  7. AT91RM9200Linux移植笔记(三)-移植Linux kernel 2.6.17

    AT91RM9200Linux移植笔记(三)-移植Linux kernel 2.6.17 手上板子原来自带的是2.4.19的内核, 打算移植新的2.6的内核,从网上下了2.6.17的kernel,下载 ...

  8. 【移植Linux 3.4.2内核第二步】之修改系统分区

    今天接着移植Linux 3.4.2内核,接着上一篇文章(点击查看:上一篇文章)我们完成了内核的串口启动打印输出,但是无法挂载根文件系统,我们看看启动后显示的是什么: 从打印结构可以看出,我们的分区不对 ...

  9. 【移植Linux 3.4.2内核第一步】之简单修改

    前一阵子已经将U-boot移植好了,从今天开始,我们开始移植linux内核.移植的内核为3.4.2,移植的开发板为:jz2440开发板. 想看之前移植U-boot的记录,可以查看我的博客专栏,点击链接 ...

最新文章

  1. Twitter 禁止未经用户同意分享照片和视频
  2. Linux 数据同步方案
  3. sublime编辑器中文乱码的问题
  4. 两个onCreate方法?你真的了解onCreate()么?
  5. Python入门100题 | 第005题
  6. 如何在ubuntu下安装detectron2_Anaconda中安装Cascade RCNN(Detectron)的若干问题
  7. boost::fibers::buffered_channel< std::string >用法的测试程序
  8. axios获取header中的信息_Axios请求头中常见的Content-Type及其使用
  9. java 序列化 protobuf_java序列化机制之protobuf(快速高效跨语言)
  10. mac 显示隐藏文件_MacOS如何隐藏、加密文件或文件夹
  11. Cilium创建pod network源码解析
  12. GB28181流媒体服务LiveGBS启动报错 HTTP Port[10000] In Use
  13. 0004-程序流程2之ui-router大意
  14. Chain of Responsibility(责任链)
  15. 计算机组成原理第六版课后题答案pdf,数据库第五版课后答案pdf
  16. 电影院售票系统,电影院订票系统,电影院购票管理系统计算机毕业设计
  17. 第八课 实战重启验证注册机制
  18. 架构之美:教你如何分析一个接口?
  19. TuGraph安装与简单使用
  20. 瑞尔森大学计算机网络专业怎么样,瑞尔森大学怎么样?

热门文章

  1. 「传统的互联网模式」与「互联网」,其实是有着本质的区别的
  2. Java中final、static关键字的作用
  3. 《微信小程序-进阶篇》package.json版本说明及各类版本符号详解(一)
  4. [转]2013年海康威视校园招聘笔试题
  5. 骁龙778g+怎么样 骁龙778g+处理器跑分多少
  6. Android Studio设置HTTP代理(可用)
  7. java发送get请求参数_HttpClient发送带参数的Get请求
  8. 网付资讯:刷脸支付代理是正规的吗?
  9. 个人微信营销第一大误区
  10. python excel格式刷_cad必学的快捷方式,让你作图飞起