打印
[STM32F4]

移植linux 5.5.3到stm32f429-discovery板资料

[复制链接]
1000|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bbstr1|  楼主 | 2020-4-15 10:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
选择stm32f429-discovery板来移植linux,主要是考虑到st的mcu在世界范围内实在是太火了,外设资源非常丰富,且429出来很多年,加上主线linux对stm32f4 f7的支持,可以很容易就在f4,f7系列上应用起丰富的linux各种软件资源,产品方案公司只用关心应用层的设计。


目前这个移植已完成的工作
1 u-boot+linux+initramfs可以从内部flash启动并运行。由于linux内核编译出来已超过3M字节,内部flash只有2M无法使用xip功能,因此采用zImage加载到sdram 0x90008000地址运行,整体效率相对xip会有一定折扣,比如3wire-spi模式,读取lcd的id时,会出现overrun。
2 spi+ili9341+tinydrm+fbdev可以工作,lcd上能看到启动日志
3 stmpe811,l3gd20传感器的驱动加入内核,驱动可识别外设。但未验证

下一步
1 将ili9341驱动移入panel下,可以和ltdc对接。提升屏幕刷新速率,支持osd
2 测试dcmi+ov5640,可使用v4l2将视频数据显示到ili9341(可能sdram和内部flash不够)
3 移植linux到stm32f469-discovery


玩linux最大的乐趣不在于将主线的代码做修改移植到自己的板子上,而是发现主线代码的bug并修改。


由于当时是在ubuntu环境下随笔记录,没有中文输入法,就用了英文, 见谅.


stm32f429-disco-linux-5.5.3.zip (1.65 MB)

crosscompile toolchain

get compile tool from

https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2?revision=108bd959-44bd-4619-9c19-26187abf5225&la=en&hash=E788CE92E5DFD64B2A8C246BBA91A249CB8E2D2D

u-boot configure, compile

get u-boot code from https://gitlab.denx.de/u-boot/u-boot

change point:

1 Makefile

line 37   #undefine MK_ARCH

2 open CONFIG_ENV_IS_NOWHERE=y , to save 0x08040000 128k flash memory, we don't need runtime env save feature.

3 open FIT to support itb file load

     CONFIG_FIT=y
     CONFIG_FIT_EXTERNAL_OFFSET=0x0
     CONFIG_FIT_ENABLE_SHA256_SUPPORT=y

4 update cmdline

    #define CONFIG_BOOTCOMMAND                        \
    "run bootcmd_ramfs"

    #define CONFIG_EXTRA_ENV_SETTINGS \   
    "bootargs_ramfs=console=ttySTM0,115200 root=/dev/ram rdinit=/linuxrc\0" \
    "bootcmd_ramfs=setenv bootargs ${bootargs_ramfs};" \
    "bootm 0x08040000\0"

configure step :

make O=../u-boot-build ARCH=arm CROSS_COMPILE=arm-none-eabi- stm32f429-discovery_defconfig

make O=../u-boot-build

sudo apt-get install openocd

openocd -f openocd.cfg -c flash_uboot

openocd configure file, openocd.cfg

source [find board/stm32f4discovery.cfg]

init

proc flash_uboot {} {
    reset halt
    flash write_image erase u-boot-build/u-boot-dtb.bin 0x08000000

    reset init
    shutdown
}
proc flash_full {} {
    reset halt
    flash write_image erase kernel.itb 0x08040000

    reset init
    shutdown
}
its configure file, kernel.its

/*
* 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-build/arch/arm/boot/zImage");
                        type = "kernel";
                        arch = "arm";
                        os = "linux";
                        compression = "none";
                        load = <0x90008000>;
                        entry = <0x90008000>;
                        hash-1 {
                                algo = "crc32";
                        };
                        hash-2 {
                                algo = "sha1";
                        };
                };
                fdt-1 {
                        description = "Flattened Device Tree blob";
                        data = /incbin/("./kernel-build/arch/arm/boot/dts/stm32f429-disco.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";
                };
        };
};
linux configure, compile

get kernel code from https://www.kernel.org/

change point:

1 arch/arm/boot/dts/stm32f4-pinctrl.dtsi add i2c3 pin mux

i2c3_pins: i2c3@0 {
                                pins {
                                        pinmux = <STM32_PINMUX('C', 9, AF4)>, /* I2C3_SDA */
                                                 <STM32_PINMUX('A', 8, AF4)>; /* I2C3_SCL */
                                        bias-disable;
                                        drive-open-drain;
                                        slew-rate = <3>;
                                };
                        };
2 arch/arm/boot/dts/stm32f429-disco.dts add stmpe811 touchscreen dts support

#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/gpio/gpio.h>

reg_3p3v: regulator-3p3v {
                compatible = "regulator-fixed";
                regulator-name = "3P3V";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
                regulator-always-on;
        };

&i2c3 {
        pinctrl-names = "default";
        pinctrl-0 = <&i2c3_pins>;
        status = "okay";

        touch: stmpe811@41 {
                compatible = "st,stmpe811";
                reg = <0x41>;
                interrupts = <15 IRQ_TYPE_EDGE_FALLING>;
                interrupt-parent = <&gpioa>;
                vio = <&reg_3p3v>;
                vcc = <&reg_3p3v>;

                stmpe_touchscreen {
                        compatible = "st,stmpe-ts";
                        st,sample-time = <4>;
                        st,mod-12b = <1>;
                        st,ref-sel = <0>;
                        st,adc-freq = <1>;
                        st,ave-ctrl = <1>;
                        st,touch-det-delay = <2>;
                        st,settling = <2>;
                        st,fraction-z = <7>;
                        st,i-drive = <1>;
                };
        };
};
3 arch/arm/boot/dts/stm32f429.dtsi add i2c3 reg , clk, interrupts

i2c3: i2c@40005c00 {
                        compatible = "st,stm32f4-i2c";
                        reg = <0x40005c00 0x400>;
                        interrupts = <72>,
                                     <73>;
                        resets = <&rcc STM32F4_APB1_RESET(I2C3)>;
                        clocks = <&rcc 0 STM32F4_APB1_CLOCK(I2C3)>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };
4 arch/arm/boot/dts/stm32f4-pinctrl.dtsi add ltdc, spi5 pin mux

ltdc_pins_disco: ltdc@1 {
                                pins {
                                        pinmux =
                                                 <STM32_PINMUX('C', 6,  AF14)>,  /* LCD_HSYNC */
                                                 <STM32_PINMUX('A', 4,  AF14)>,  /* LCD_VSYNC */
                                                 <STM32_PINMUX('G', 7,  AF14)>,  /* LCD_CLK */
                                                 <STM32_PINMUX('C', 10, AF14)>,  /* LCD_R2 */
                                                 <STM32_PINMUX('B', 0,  AF9)>,   /* LCD_R3 */
                                                 <STM32_PINMUX('A', 11, AF14)>,  /* LCD_R4 */
                                                 <STM32_PINMUX('A', 12, AF14)>,  /* LCD_R5 */
                                                 <STM32_PINMUX('B', 1,  AF9)>,   /* LCD_R6*/
                                                 <STM32_PINMUX('G', 6,  AF14)>,  /* LCD_R7 */
                                                 <STM32_PINMUX('A', 6,  AF14)>,  /* LCD_G2 */
                                                 <STM32_PINMUX('G', 10, AF9)>,   /* LCD_G3 */
                                                 <STM32_PINMUX('B', 10, AF14)>,  /* LCD_G4 */
                                                 <STM32_PINMUX('D', 6,  AF14)>,  /* LCD_B2 */
                                                 <STM32_PINMUX('G', 11, AF14)>,  /* LCD_B3*/
                                                 <STM32_PINMUX('B', 11, AF14)>,  /* LCD_G5 */
                                                 <STM32_PINMUX('C', 7,  AF14)>,  /* LCD_G6 */
                                                 <STM32_PINMUX('D', 3,  AF14)>,  /* LCD_G7 */
                                                 <STM32_PINMUX('G', 12, AF9)>,   /* LCD_B4 */
                                                 <STM32_PINMUX('A', 3,  AF14)>,  /* LCD_B5 */
                                                 <STM32_PINMUX('B', 8,  AF14)>,  /* LCD_B6 */
                                                 <STM32_PINMUX('B', 9,  AF14)>,  /* LCD_B7 */
                                                 <STM32_PINMUX('F', 10, AF14)>;  /* LCD_DE */
                                        slew-rate = <2>;
                                };
                        };
                        spi5_pins: spi5@0 {
                                pins1 {
                                        pinmux =
                                                 <STM32_PINMUX('F', 7, AF5)>, /* SPI5_CLK */
                                                 <STM32_PINMUX('F', 9, AF5)>; /* SPI5_MOSI */
                                        bias-disable;
                                        drive-push-pull;
                                        slew-rate = <0>;
                                };
                                pins2 {
                                        pinmux = <STM32_PINMUX('F', 8, AF5)>; /* SPI5_MISO */
                                        bias-disable;
                                };
                        };
5 arch/arm/boot/dts/stm32f429-disco.dts add l3gd20, ili9341 dts

panel_backlight:backlight {
                compatible = "gpio-backlight";
                gpios = <&gpiog 2 1>;
                default-on;
                status = "okay";
        };


/*bak: actually, ili9341 don't need gpio-bakclight dts node, just add here make tinydrm driver happy*/

&spi5 {
        status = "okay";
        pinctrl-0 = <&spi5_pins>;
        pinctrl-names = "default";
        #address-cells = <1>;
        #size-cells = <0>;
        cs-gpios = <&gpioc 1 GPIO_ACTIVE_LOW>,<&gpioc 2 GPIO_ACTIVE_LOW>;
        dmas = <&dma2 3 2 0x400 0x0>,
               <&dma2 4 2 0x400 0x0>;
        dma-names = "rx", "tx";
        l3gd20: l3gd20@0 {
                compatible = "st,l3gd20-gyro";
            spi-max-frequency = <10000000>;
            st,drdy-int-pin = <2>;
                interrupt-parent = <&gpioa>;
                interrupts = <1 IRQ_TYPE_EDGE_RISING>,
                                         <2 IRQ_TYPE_EDGE_RISING>;
            reg = <0>;
                vddio = <&reg_3p3v>;
                vdd = <&reg_3p3v>;
        };
        display: display@1{
                compatible = "adafruit,yx240qv29", "ilitek,ili9341";
                reg = <1>;
                spi-3wire;
                spi-max-frequency = <10000000>;
                dc = <&gpiod 13 1>;
                rotation = <90>;
                backlight = <&panel_backlight>;
        };
};
6 drivers/spi/spi-stm32.c







7 kernel config change

stm32-kernel.zip (16.89 KB)

make O=../kernel-build stm32_defconfig

make O=../kernel-build LOADADDR=0x90008000 zImage dtbs

stm32 2m flash layout

0x08000000 - 0x0803fffff   u-boot-dtb.bin

0x08040000 - 0x08200000 kernel.itb

initramfs filesystem

get filesystem from https://elinux.org/File:Stm32_mini_rootfs.cpio.bz2

1 bzip2 -d Stm32_mini_rootfs.cpio.bz2
2 mkdir rootfs
3 cd rootfs/
4 sudo cpio -idmv < ../Stm32_mini_rootfs.cpio
5 paste below strings to init
  #!/bin/sh
  # devtmpfs does not get automounted for initramfs
  /bin/mount -t devtmpfs devtmpfs /dev
  exec 0</dev/console
  exec 1>/dev/console
  exec 2>/dev/console
  exec /sbin/init $
use mkimage to create kernel.itb, include zImage with initramfs,dtb

./u-boot-build/tools/mkimage -f kernel.its kernel.itb

use stlink-utils to flash kernel.itb to 0x08040000

TODO: as memory limition, there is no more rom to add user app to verify touch-screen, geting l3gd20 gyro data, drm-utils,will do it after get large memory board. currently just verify the driver register to system.

Log:

U-Boot 2020.04-rc2-gdc67a56-dirty (Feb 26 2020 - 17:13:10 +0800)

DRAM:  8 MiB
Flash: 2 MiB
In:    serial@40011000
Out:   serial@40011000
Err:   serial@40011000
Hit any key to stop autoboot:  0
## Loading kernel from FIT Image at 08040000 ...
   Using 'conf-1' configuration
   Trying 'kernel' kernel subimage
     Description:  Vanilla Linux kernel
     Type:         Kernel Image
     Compression:  uncompressed
     Data Start:   0x080400e8
     Data Size:    1762256 Bytes = 1.7 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x90008000
     Entry Point:  0x90008000
     Hash algo:    crc32
     Hash value:   59603570
     Hash algo:    sha1
     Hash value:   84ebfe63331e4d53b0d1e9c9bd308b5082711ca9
   Verifying Hash Integrity ... crc32+ sha1+ OK
## Loading fdt from FIT Image at 08040000 ...
   Using 'conf-1' configuration
   Trying 'fdt-1' fdt subimage
     Description:  Flattened Device Tree blob
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x081ee5e0
     Data Size:    19800 Bytes = 19.3 KiB
     Architecture: ARM
     Hash algo:    crc32
     Hash value:   87ea4d4c
     Hash algo:    sha1
     Hash value:   820dc759459a2c7f7dfe641093f9e7c19dacbcea
   Verifying Hash Integrity ... crc32+ sha1+ OK
   Booting using the fdt blob at 0x81ee5e0
   Loading Kernel Image
   Loading Device Tree to 905b4000, end 905bbd57 ... OK

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 5.5.3-gfa93efe-dirty (th@th-Latitude-XT3) (gcc version 9.2.1 20191025 (release) [ARM/arm-9-branch revision 277599] (GNU Tools for Arm Embedded Processors 9-2019-q4-major)) #3 PREEMPT Wed Feb 26 16:50:54 CST 2020
[    0.000000] CPU: ARMv7-M [410fc241] revision 1 (ARMv7M), cr=00000000
[    0.000000] CPU: unknown data cache, unknown instruction cache
[    0.000000] OF: fdt: Machine model: STMicroelectronics STM32F429i-DISCO board
[    0.000000] On node 0 totalpages: 2048
[    0.000000]   Normal zone: 16 pages used for memmap
[    0.000000]   Normal zone: 0 pages reserved
[    0.000000]   Normal zone: 2048 pages, LIFO batch:0
[    0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[    0.000000] pcpu-alloc: [0] 0
[    0.000000] Built 1 zonelists, mobility grouping off.  Total pages: 2032
[    0.000000] Kernel command line: console=ttySTM0,115200 root=/dev/ram rdinit=/linuxrc loglevel=8 console=/dev/fb0 fbcon=map:0
[    0.000000] Dentry cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.000000] Inode-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 5072K/8192K available (1671K kernel code, 146K rwdata, 680K rodata, 216K init, 107K bss, 3120K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] rcu: Preemptible hierarchical RCU implementation.
[    0.000000]  Tasks RCU enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[    0.000000] /soc/interrupt-controller@40013c00: bank0
[    0.000000] random: get_random_bytes called from start_kernel+0x1b3/0x320 with crng_init=0
[    0.000000] clocksource: arm_system_timer: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 331816030 ns
[    0.000000] ARM System timer initialized as clocksource
[    0.000237] sched_clock: 32 bits at 90MHz, resolution 11ns, wraps every 23860929530ns
[    0.000498] timer@40000c00: STM32 sched_clock registered
[    0.000955] Switching to timer-based delay loop, resolution 11ns
[    0.001211] timer@40000c00: STM32 delay timer registered
[    0.001733] clocksource: timer@40000c00: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 21236227187 ns
[    0.002316] /soc/timer@40000c00: STM32 clockevent driver initialized (32 bits)
[    0.008419] Calibrating delay loop (skipped), value calculated using timer frequency.. 180.00 BogoMIPS (lpj=900000)
[    0.008890] pid_max: default: 4096 minimum: 301
[    0.012786] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.013309] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.040257] rcu: Hierarchical SRCU implementation.
[    0.045459] devtmpfs: initialized
[    0.263198] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.263593] pinctrl core: initialized pinctrl subsystem
[    0.454026] stm32f429-pinctrl soc:pin-controller: No package detected, use default one
[    0.468984] stm32f429-pinctrl soc:pin-controller: GPIOA bank added
[    0.475184] stm32f429-pinctrl soc:pin-controller: GPIOB bank added
[    0.481153] stm32f429-pinctrl soc:pin-controller: GPIOC bank added
[    0.487272] stm32f429-pinctrl soc:pin-controller: GPIOD bank added
[    0.493313] stm32f429-pinctrl soc:pin-controller: GPIOE bank added
[    0.499418] stm32f429-pinctrl soc:pin-controller: GPIOF bank added
[    0.505540] stm32f429-pinctrl soc:pin-controller: GPIOG bank added
[    0.511497] stm32f429-pinctrl soc:pin-controller: GPIOH bank added
[    0.517922] stm32f429-pinctrl soc:pin-controller: GPIOI bank added
[    0.523809] stm32f429-pinctrl soc:pin-controller: GPIOJ bank added
[    0.529952] stm32f429-pinctrl soc:pin-controller: GPIOK bank added
[    0.530599] stm32f429-pinctrl soc:pin-controller: Pinctrl STM32 initialized
[    0.718086] stm32-dma 40026000.dma-controller: STM32 DMA driver registered
[    0.747631] stm32-dma 40026400.dma-controller: STM32 DMA driver registered
[    0.785824] clocksource: Switched to clocksource timer@40000c00
[    1.385760] workingset: timestamp_bits=30 max_order=11 bucket_order=0
[    1.572198] io scheduler mq-deadline registered
[    1.572446] io scheduler kyber registered
[    1.595395] STM32 USART driver initialized
[    1.601590] 40011000.serial: ttySTM0 at MMIO 0x40011000 (irq = 34, base_baud = 5625000) is a stm32-usart
[    2.015282] printk: console [ttySTM0] enabled
[    2.085487] [drm] Initialized ili9341 1.0.0 20180514 for spi0.1 on minor 0
[    2.117646] ili9341 spi0.1: fb0: ili9341drmfb frame buffer device
[    2.126249] spi_stm32 40015000.spi: driver initialized
[    2.152951] stm32_rtc 40002800.rtc: registered as rtc0
[    2.160552] stm32_rtc 40002800.rtc: Date/Time must be initialized
[    2.170391] i2c /dev entries driver
[    2.195837] stmpe-i2c 0-0041: stmpe811 detected, chip id: 0x811
[    2.236797] random: fast init done
[    2.251960] stmpe-ts stmpe-ts: DMA mask not set
[    2.281125] input: stmpe-ts as /devices/platform/soc/40005c00.i2c/i2c-0/0-0041/stmpe-ts/input/input0
[    2.293532] stm32f4-i2c 40005c00.i2c: STM32F4 I2C driver registered
[    2.339105] st-gyro-spi spi0.0: spi0.0 supply vdd not found, using dummy regulator
[    2.347726] st-gyro-spi spi0.0: spi0.0 supply vddio not found, using dummy regulator
[    2.371508] iio iio:device0: interrupts on the rising edge
[    2.395188] iio iio:device0: registered gyroscope l3gd20
[    2.423991] input: gpio_keys as /devices/platform/gpio_keys/input/input1
[    2.434153] stm32_rtc 40002800.rtc: setting system clock to 2000-01-01T00:55:40 UTC (946688140)
[    2.480310] Freeing unused kernel memory: 216K
[    2.484813] This architecture does not have kernel memory protection.
[    2.491595] Run /linuxrc as init process
/ # free
             total       used       free     shared    buffers     cached
Mem:          5288       3644       1644          0          0        648
-/+ buffers/cache:       2996       2292
/ # [  278.407733] random: crng init done

/ # ls /sys/class
backlight    drm          input        mmc_host     tty
bdi          graphics     leds         regulator    wakeup
block        i2c-adapter  mem          rtc          watchdog
dma          i2c-dev      misc         spi_master
/ # ls /sys/class/drm
card0        card0-SPI-1  version
/ # ls -l /sys/class/drm
lrwxrwxrwx    1 0        0                0 Jan  1 01:23 card0 -> ../../devices/platform/soc/40015000.spi/spi_master/spi0/spi0.1/drm/card0
lrwxrwxrwx    1 0        0                0 Jan  1 01:23 card0-SPI-1 -> ../../devices/platform/soc/40015000.spi/spi_master/spi0/spi0.1/drm/card0/card0-SPI-1
-r--r--r--    1 0        0             4096 Jan  1 01:23 version
/ # ls -l /sys/class/graphics
lrwxrwxrwx    1 0        0                0 Jan  1 01:24 fb0 -> ../../devices/platform/soc/40015000.spi/spi_master/spi0/spi0.1/graphics/fb0
/ # ls -l /sys/class/input
lrwxrwxrwx    1 0        0                0 Jan  1 01:24 input0 -> ../../devices/platform/soc/40005c00.i2c/i2c-0/0-0041/stmpe-ts/input/input0
lrwxrwxrwx    1 0        0                0 Jan  1 01:24 input1 -> ../../devices/platform/gpio_keys/input/input1
/ # ls -l /sys/class/spi_master
lrwxrwxrwx    1 0        0                0 Jan  1 01:24 spi0 -> ../../devices/platform/soc/40015000.spi/spi_master/spi0
/ # ls -l /sys/class/spi_master/spi0
lrwxrwxrwx    1 0        0                0 Jan  1 01:24 /sys/class/spi_master/spi0 -> ../../devices/platform/soc/40015000.spi/spi_master/spi0
/ # ls -l /sys/class/spi_master/spi0/
lrwxrwxrwx    1 0        0                0 Jan  1 01:24 device -> ../../../40015000.spi
lrwxrwxrwx    1 0        0                0 Jan  1 01:24 of_node -> ../../../../../../firmware/devicetree/base/soc/spi@40015000
drwxr-xr-x    2 0        0                0 Jan  1 01:24 power
drwxr-xr-x    6 0        0                0 Jan  1 01:24 spi0.0
drwxr-xr-x    6 0        0                0 Jan  1 01:24 spi0.1
drwxr-xr-x    2 0        0                0 Jan  1 01:24 statistics
lrwxrwxrwx    1 0        0                0 Jan  1 01:24 subsystem -> ../../../../../../class/spi_master
-rw-r--r--    1 0        0             4096 Jan  1 01:24 uevent
/ # ls -l /sys/class/spi_master/spi0/spi0.0
lrwxrwxrwx    1 0        0                0 Jan  1 01:25 driver -> ../../../../../../../bus/spi/drivers/st-gyro-spi
-rw-r--r--    1 0        0             4096 Jan  1 01:25 driver_override
drwxr-xr-x    6 0        0                0 Jan  1 01:25 iio:device0
-r--r--r--    1 0        0             4096 Jan  1 01:25 modalias
lrwxrwxrwx    1 0        0                0 Jan  1 01:25 of_node -> ../../../../../../../firmware/devicetree/base/soc/spi@40015000/l3gd20@0
drwxr-xr-x    2 0        0                0 Jan  1 01:25 power
drwxr-xr-x    2 0        0                0 Jan  1 01:25 statistics
lrwxrwxrwx    1 0        0                0 Jan  1 01:25 subsystem -> ../../../../../../../bus/spi
drwxr-xr-x    3 0        0                0 Jan  1 01:25 trigger0
-rw-r--r--    1 0        0             4096 Jan  1 01:25 uevent
/ # ls -l /sys/class/spi_master/spi0/spi0.1
lrwxrwxrwx    1 0        0                0 Jan  1 01:25 driver -> ../../../../../../../bus/spi/drivers/ili9341
-rw-r--r--    1 0        0             4096 Jan  1 01:25 driver_override
drwxr-xr-x    3 0        0                0 Jan  1 01:25 drm
drwxr-xr-x    3 0        0                0 Jan  1 01:25 graphics
-r--r--r--    1 0        0             4096 Jan  1 01:25 modalias
lrwxrwxrwx    1 0        0                0 Jan  1 01:25 of_node -> ../../../../../../../firmware/devicetree/base/soc/spi@40015000/display@1
drwxr-xr-x    2 0        0                0 Jan  1 01:25 power
drwxr-xr-x    2 0        0                0 Jan  1 01:25 statistics
lrwxrwxrwx    1 0        0                0 Jan  1 01:25 subsystem -> ../../../../../../../bus/spi
-rw-r--r--    1 0        0             4096 Jan  1 01:25 uevent
/ # free
             total       used       free     shared    buffers     cached
Mem:          5288       3680       1608          0          0        648
-/+ buffers/cache:       3032       2256
/ #


使用特权

评论回复
沙发
keaibukelian| | 2020-5-9 13:30 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
板凳
labasi| | 2020-5-9 13:31 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
地板
renzheshengui| | 2020-5-9 13:31 | 只看该作者
资料好全面啊

使用特权

评论回复
5
wakayi| | 2020-5-9 13:32 | 只看该作者
其他的系统是不是也类似啊

使用特权

评论回复
6
bbstr1|  楼主 | 2020-11-19 13:32 | 只看该作者
wakayi 发表于 2020-5-9 13:32
其他的系统是不是也类似啊

是的,类似
可以去www.kernel.org下载完整代码,这些修改都已提交到内核里了

有问题,可在这个帖子里交流.

使用特权

评论回复
7
gyh974| | 2020-11-19 14:03 | 只看该作者
楼主的固件是对F429系列都通用的吗?

使用特权

评论回复
8
bbstr1|  楼主 | 2020-11-20 18:22 | 只看该作者
gyh974 发表于 2020-11-19 14:03
楼主的固件是对F429系列都通用的吗?

对,通用。 不过这个不叫固件了,叫内核

使用特权

评论回复
9
ffbiao| | 2020-11-23 17:32 | 只看该作者
感谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

32

帖子

1

粉丝