linux devmem源码 linux源码在哪
编译正点原子的出厂 Linux 内核源码,为后面移植linux做准备。研究对象如下:
1)、linux内核镜像文件“uImage”
路径为“arch/arm/boot”;
2)、设备树文件“stm32mp157d-atk.dtb”
路径为“arch/arm/boot/dts”
3)、默认配置文件“stm32mp1_atk_defconfig”
路径为“arch/arm/configs”
1、创建“alientek_linux”目录,用来存放正点原子的linux源码
打开终端
输入“ls回车”
输入“cd linux/回车”,切换到“linux”目录
输入“ls回车”,列出“linux”目录下的文件和文件夹
输入“cd atk-mp1/回车” ,切换到“atk-mp1”目录
输入“ls回车”,列出“atk-mp1”目录下的文件和文件夹
输入“mkdir linux/回车”,在“/linux/atk-mp1/”目录下创建“linux”目录;
输入“cd linux/回车” ,切换到“linux”目录
输入“mkdir alientek_linux/回车”,在“/linux/atk-mp1/linux”目录下创建“alientek_linux”目录;
输入“ls回车”,列出“/linux/atk-mp1/linux”目录下的文件和文件夹
2、将“linux-5.4.31-gca8f6cddb-v1.7.tar.bz2”压缩包,使用FileZilla把它拷贝到“/linux/atk-mp1/linux/alientek_linux”目录下。该文件位于“01、程序源码\01、正点原子Linux出厂系统源码”目录中。
3、输入“cd alientek_linux/回车”,切换到“alientek_linux”目录
输入“ls回车”,列出“alientek_linux”目录下的文件和文件夹
输入“tar -vxjf linux-5.4.31-gca8f6cddb-v1.7.tar.bz2回车”,解压
4、输入“ls回车”,列出“alientek_linux”目录下的文件和文件夹
输入“rm linux-5.4.31-gca8f6cddb-v1.7.tar.bz2回车”,删除压缩包
5、创建脚本文件“stm32mp157d_atk.sh”
输入“vi stm32mp157d_atk.sh回车”,新建一个脚本文件“stm32mp157d_atk.sh”
如果在第1次编译时,脚本文件如下:
#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf-
#清除工程,删除“.config”文件,执行1次即可,以后就不要再执行了。
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf-
#设置为默认配置,执行1次即可,以后就不需要执行该语句了。
#“stm32mp1_atk_defconfig”位于“arch/arm/configs”目录下;
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf-
#打开图形化配置界面
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf-
#编译镜像文件和设备树,linux内核在DDR中的加载地址为0XC2000040,-j8表示采用8线程编译
6、按“ESC键”,输入“:wq回车”,保存文件
输入“chmod 777 stm32mp157d_atk.sh回车”,给脚本文件赋予可执行权限
7、输入“./stm32mp157d_atk.sh回车”,执行编译;
编译完成后,文件如下:
注意:
为什么uboot里面的uImage的地址是0xC2000000,编译linux的时候,指定的的LOADADDR是0xC2000040?
因为linux的uImage最前面的Ox40个字节是头部信息。
编译得到“arch/arm/boot/uImage”
设备树:“arch/arm/boot/dts/stm32mp157d-atk.dtb”
“stm32mp1_atk_defconfig”位于“arch/arm/configs”目录下;
8、查询是否生成了uImage文件
输入“ls回车”
输入“cd arch/回车”
输入“ls回车”
输入“cd arm/回车”
输入“ls回车”
输入“cd boot/回车”
输入“ls回车”
9、查询是否生成了“stm32mp157d-atk.dtb”文件
输入“cd dts/回车”
输入“ls stm32mp157*回车”
10、将“stm32mp157d-atk.dtb”拷贝到“/home/zgq/linux/tftpboot/”目录下
打开第2个终端,查看tftpboot是不是存在
输入“ls回车”
输入“cd linux/回车”,切换到“linux”目录
输入“ls回车”,列出“linux”目录下的文件和文件夹
输入“cd tftpboot/回车”,切换到“tftpboot”目录
输入“ls回车”,列出“tftpboot”目录下的文件和文件夹
11、回到第1个打开的终端,输入“cp stm32mp157d-atk.dtb /home/zgq/linux/tftpboot/ -f回车”,执行文件拷贝;
12、输入“cd ..回车”,回到“boot”目录下
输入“ls回车”,列出“boot”目录下的文件和文件夹
输入“cp uImage /home/zgq/linux/tftpboot/ -f回车”,执行文件拷贝;
13、回到第2个打开的终端,输入“ls -l回车”
原有的“文件”被替换了。
按复位键,启动。
注意:将开发板通过网线连接到路由器,同时开启虚拟机。
14、使用VSCode创建工程
1)、点击虚拟机上的VSCode,然后点击“文件”,点击“打开文件夹”,选择“alientek_linux”
2)、点击“确定”
3)、点击“文件”,点击“将工作区另存为...”,在名称右边的文本框里输入“alientek_linux”,见下图:
4)、点击“保存”,得到下图:
5)、linux设备树头文件stm32mp157d-atk.dtsi源码,将来移植linux可以参考使用,见下图:
linux设备树头文件stm32mp157d-atk.dtsi源码如下:
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) /* * Copyright (C) STMicroelectronics 2019 - All Rights Reserved * Author: Alexandre Torgue <[email protected]> for STMicroelectronics. */ #include "stm32mp157-m4-srm.dtsi" #include "stm32mp157-m4-srm-pinctrl.dtsi" #include <dt-bindings/mfd/st,stpmic1.h> #include <dt-bindings/usb/pd.h> / { memory@c0000000 { device_type = "memory"; reg = <0xc0000000 0x40000000>; }; reserved-memory { #address-cells = <1>; #size-cells = <1>; ranges; mcuram2: mcuram2@10000000 { compatible = "shared-dma-pool"; reg = <0x10000000 0x40000>; no-map; }; vdev0vring0: vdev0vring0@10040000 { compatible = "shared-dma-pool"; reg = <0x10040000 0x1000>; no-map; }; vdev0vring1: vdev0vring1@10041000 { compatible = "shared-dma-pool"; reg = <0x10041000 0x1000>; no-map; }; vdev0buffer: vdev0buffer@10042000 { compatible = "shared-dma-pool"; reg = <0x10042000 0x4000>; no-map; }; mcuram: mcuram@30000000 { compatible = "shared-dma-pool"; reg = <0x30000000 0x40000>; no-map; }; retram: retram@38000000 { compatible = "shared-dma-pool"; reg = <0x38000000 0x10000>; no-map; }; }; clocks { clk_ext_camera: clk-ext-camera { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <24000000>; }; }; dht11 { compatible = "alientek,dht11"; dht11-gpio = <&gpiof 2 GPIO_ACTIVE_LOW>; status = "okay"; }; ds18b20 { compatible = "alientek,ds18b20"; ds18b20-gpio = <&gpiof 2 GPIO_ACTIVE_LOW>; status = "okay"; }; gpio-keys { compatible = "gpio-keys"; autorepeat; key0 { label = "USER-KEY0"; linux,code = <114>; gpios = <&gpiog 3 GPIO_ACTIVE_LOW>; gpio-key,wakeup; }; key1 { label = "USER-KEY1"; linux,code = <115>; gpios = <&gpioh 7 GPIO_ACTIVE_LOW>; gpio-key,wakeup; }; }; lcd_id { select_id = <0>; }; leds { compatible = "gpio-leds"; led1 { label = "sys-led"; gpios = <&gpioi 0 GPIO_ACTIVE_LOW>; linux,default-trigger = "heartbeat"; default-state = "on"; status = "okay"; }; led2 { label = "user-led"; gpios = <&gpiof 3 GPIO_ACTIVE_LOW>; linux,default-trigger = "none"; default-state = "on"; status = "okay"; }; beep { label = "beep"; gpios = <&gpioc 7 GPIO_ACTIVE_LOW>; default-state = "off"; }; }; panel_backlight: panel-backlight { compatible = "pwm-backlight"; pwms = <&pwm4 1 5000000>; brightness-levels = <0 4 8 16 32 64 128 255>; power-supply = <&v3v3>; default-brightness-level = <7>; status = "okay"; }; usb_phy_tuning: usb-phy-tuning { st,hs-dc-level = <2>; st,fs-rftime-tuning; st,hs-rftime-reduction; st,hs-current-trim = <15>; st,hs-impedance-trim = <1>; st,squelch-level = <3>; st,hs-rx-offset = <2>; st,no-lsfs-sc; }; v3v3: regulator-3p3v { compatible = "regulator-fixed"; regulator-name = "v3v3"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-always-on; regulator-boot-on; }; vddcore: buck1 { compatible = "regulator-fixed"; regulator-name = "vddcore"; regulator-min-microvolt = <1200000>; regulator-max-microvolt = <1350000>; regulator-always-on; regulator-boot-on; }; vdd_usb: regulator-vdd-usb { compatible = "regulator-fixed"; regulator-name = "vdd_usb"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-always-on; regulator-boot-on; }; vdd: regulator-vdd { compatible = "regulator-fixed"; regulator-name = "vdd"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-always-on; regulator-boot-on; }; vdda: ldo1 { compatible = "regulator-fixed"; regulator-name = "vdda"; regulator-min-microvolt = <2900000>; regulator-max-microvolt = <2900000>; regulator-always-on; regulator-boot-on; }; v1v8_audio: regulator-v1v8-audio { compatible = "regulator-fixed"; regulator-name = "v1v8_audio"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-always-on; regulator-boot-on; }; v2v8: regulator-v2v8 { compatible = "regulator-fixed"; regulator-name = "v2v8"; regulator-min-microvolt = <2800000>; regulator-max-microvolt = <2800000>; regulator-always-on; regulator-over-current-protection; }; vin: regulator-vin { compatible = "regulator-fixed"; regulator-name = "vin"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; regulator-always-on; regulator-boot-on; }; v3v3_hdmi: regulator-v3v3-hdmi { compatible = "regulator-fixed"; regulator-name = "v3v3_hdmi"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-always-on; regulator-boot-on; }; v1v2_hdmi: regulator-v1v2-hdmi { compatible = "regulator-fixed"; regulator-name = "v1v2_hdmi"; regulator-min-microvolt = <1200000>; regulator-max-microvolt = <1200000>; regulator-always-on; regulator-boot-on; }; spdif_out: spdif-out { #sound-dai-cells = <0>; compatible = "linux,spdif-dit"; status = "okay"; spdif_out_port: port { spdif_out_endpoint: endpoint { remote-endpoint = <&sai4a_endpoint>; }; }; }; spdif_in: spdif-in { #sound-dai-cells = <0>; compatible = "linux,spdif-dir"; status = "okay"; spdif_in_port: port { spdif_in_endpoint: endpoint { remote-endpoint = <&spdifrx_endpoint>; }; }; }; #if 1 sound: sound { compatible = "audio-graph-card"; label = "STM32MP1-DK"; routing = "Playback" , "MCLK", "Capture" , "MCLK", "MICL" , "Mic Bias"; dais = <&sai2a_port &sai2b_port &i2s2_port &spdifrx_port>; status = "okay"; }; #else sound: sound { compatible = "audio-graph-card"; label = "STM32MP1-DK"; widgets = "Microphone", "Mic Jack", "Line", "Line In", "Line", "Line Out", "Speaker", "Speaker", "Headphone", "Headphone Jack"; routing = "Headphone Jack", "HP_L", "Headphone Jack", "HP_R", "Speaker", "SPK_LP", "Speaker", "SPK_LN", "Speaker", "SPK_RP", "Speaker", "SPK_RN", "LINPUT1", "Mic Jack", "LINPUT3", "Mic Jack", "RINPUT1", "Mic Jack", "RINPUT2", "Mic Jack"; dais = <&sai2a_port &sai2b_port &sai4a_port &spdifrx_port &i2s2_port>; status = "okay"; }; #endif }; &pinctrl { dac_ch1_pins_a: dac-ch1 { pins { pinmux = <STM32_PINMUX('A', 4, ANALOG)>; /* configure 'PA4' as ANALOG */ }; }; adc1_in6_pins_b: adc1-in6 { pins { pinmux = <STM32_PINMUX('A', 5, ANALOG)>; }; }; dcmi_pins_b: dcmi-1 { pins { pinmux = <STM32_PINMUX('H', 8, AF13)>,/* DCMI_HSYNC */ <STM32_PINMUX('B', 7, AF13)>,/* DCMI_VSYNC */ <STM32_PINMUX('A', 6, AF13)>,/* DCMI_PIXCLK */ <STM32_PINMUX('H', 9, AF13)>,/* DCMI_D0 */ <STM32_PINMUX('H', 10, AF13)>,/* DCMI_D1 */ <STM32_PINMUX('H', 11, AF13)>,/* DCMI_D2 */ <STM32_PINMUX('H', 12, AF13)>,/* DCMI_D3 */ <STM32_PINMUX('H', 14, AF13)>,/* DCMI_D4 */ <STM32_PINMUX('I', 4, AF13)>,/* DCMI_D5 */ <STM32_PINMUX('B', 8, AF13)>,/* DCMI_D6 */ <STM32_PINMUX('E', 6, AF13)>;/* DCMI_D7 */ bias-disable; }; }; dcmi_sleep_pins_b: dcmi-sleep-1 { pins { pinmux = <STM32_PINMUX('H', 8, ANALOG)>,/* DCMI_HSYNC */ <STM32_PINMUX('B', 7, ANALOG)>,/* DCMI_VSYNC */ <STM32_PINMUX('A', 6, ANALOG)>,/* DCMI_PIXCLK */ <STM32_PINMUX('H', 9, ANALOG)>,/* DCMI_D0 */ <STM32_PINMUX('H', 10, ANALOG)>,/* DCMI_D1 */ <STM32_PINMUX('H', 11, ANALOG)>,/* DCMI_D2 */ <STM32_PINMUX('H', 12, ANALOG)>,/* DCMI_D3 */ <STM32_PINMUX('H', 14, ANALOG)>,/* DCMI_D4 */ <STM32_PINMUX('I', 4, ANALOG)>,/* DCMI_D5 */ <STM32_PINMUX('B', 8, ANALOG)>,/* DCMI_D6 */ <STM32_PINMUX('E', 6, ANALOG)>;/* DCMI_D7 */ }; }; stusb1600_pins_b: stusb1600-0 { pins { pinmux = <STM32_PINMUX('G', 2, ANALOG)>; bias-pull-up; }; }; uart7_pins_b: uart7-1 { pins1 { pinmux = <STM32_PINMUX('F', 7, AF7)>, /* UART7_TX */ <STM32_PINMUX('F', 8, AF7)>; /* UART7_RTS */ bias-disable; drive-push-pull; slew-rate = <0>; }; pins2 { pinmux = <STM32_PINMUX('F', 6, AF7)>, /* UART7_RX */ <STM32_PINMUX('F', 9, AF7)>; /* UART7_CTS_NSS */ bias-disable; }; }; uart7_idle_pins_b: uart7-idle-1 { pins1 { pinmux = <STM32_PINMUX('F', 7, ANALOG)>, /* UART7_TX */ <STM32_PINMUX('F', 8, ANALOG)>, /* UART7_RTS */ <STM32_PINMUX('F', 9, ANALOG)>; /* UART7_CTS_NSS */ }; pins2 { pinmux = <STM32_PINMUX('F', 6, AF7)>; /* UART7_RX */ bias-disable; }; }; uart7_sleep_pins_b: uart7-sleep-1 { pins { pinmux = <STM32_PINMUX('F', 7, ANALOG)>, /* UART7_TX */ <STM32_PINMUX('F', 8, ANALOG)>, /* UART7_RTS */ <STM32_PINMUX('F', 6, ANALOG)>, /* UART7_RX */ <STM32_PINMUX('F', 9, ANALOG)>; /* UART7_CTS_NSS */ }; }; usart3_pins_c: uart3-0 { pins1 { pinmux = <STM32_PINMUX('D', 8, AF7)>; /* UART5_TX */ bias-disable; drive-push-pull; slew-rate = <0>; }; pins2 { pinmux = <STM32_PINMUX('D', 9, AF7)>; /* UART5_RX */ bias-disable; }; }; usart3_idle_pins_c: uart3-idle-0 { pins1 { pinmux = <STM32_PINMUX('D', 8, ANALOG)>; /* UART5_TX */ }; pins2 { pinmux = <STM32_PINMUX('D', 9, AF7)>; /* UART5_RX */ bias-disable; }; }; usart3_sleep_pins_c: uart3-sleep-0 { pins { pinmux = <STM32_PINMUX('D', 8, ANALOG)>, /* UART5_TX */ <STM32_PINMUX('D', 9, ANALOG)>; /* UART5_RX */ }; }; uart5_pins_a: uart5-0 { pins1 { pinmux = <STM32_PINMUX('B', 13, AF14)>; /* UART5_TX */ bias-disable; drive-push-pull; slew-rate = <0>; }; pins2 { pinmux = <STM32_PINMUX('B', 12, AF14)>; /* UART5_RX */ bias-disable; }; }; uart5_idle_pins_a: uart5-idle-0 { pins1 { pinmux = <STM32_PINMUX('B', 13, ANALOG)>; /* UART5_TX */ }; pins2 { pinmux = <STM32_PINMUX('B', 12, AF14)>; /* UART5_RX */ bias-disable; }; }; uart5_sleep_pins_a: uart5-sleep-0 { pins { pinmux = <STM32_PINMUX('B', 13, ANALOG)>, /* UART5_TX */ <STM32_PINMUX('B', 12, ANALOG)>; /* UART5_RX */ }; }; i2s2_pins_b: i2s2-2 { pins { pinmux = <STM32_PINMUX('C', 3, AF5)>, /* I2S2_SDO */ <STM32_PINMUX('B', 9, AF5)>, /* I2S2_WS */ <STM32_PINMUX('B', 10, AF5)>; /* I2S2_CK */ slew-rate = <1>; drive-push-pull; bias-disable; }; }; i2s2_pins_sleep_b: i2s2-3 { pins { pinmux = <STM32_PINMUX('C', 3, ANALOG)>, /* I2S2_SDO */ <STM32_PINMUX('B', 9, ANALOG)>, /* I2S2_WS */ <STM32_PINMUX('B', 10, ANALOG)>; /* I2S2_CK */ }; }; }; &adc { /* ADC1 & ADC2 common resources */ pinctrl-names = "default"; pinctrl-0 = <&adc1_in6_pins_b>; vdd-supply = <&vdd>; vdda-supply = <&vdd>; vref-supply = <&vdd>; status = "okay"; adc1: adc@0 { /* private resources for ADC1 */ st,adc-channels = <19>; st,min-sample-time-nsecs = <10000>; status = "okay"; }; }; &m_can1 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&m_can1_pins_a>; pinctrl-1 = <&m_can1_sleep_pins_a>; status = "okay"; }; &cec { pinctrl-names = "default", "sleep"; pinctrl-0 = <&cec_pins_b>; pinctrl-1 = <&cec_pins_sleep_b>; status = "okay"; }; &crc1 { status = "okay"; }; &dac { pinctrl-names = "default"; pinctrl-0 = <&dac_ch1_pins_a>; /* Use PA4 and PA5 pin as ANALOG */ vref-supply = <&v3v3>; /* Example to use VREFBUF (It needs to be enabled as well) */ status = "okay"; /* Enable the DAC block */ dac1: dac@1 { status = "okay"; /* Enable DAC1 */ }; }; &dcmi { status = "okay"; pinctrl-names = "default", "sleep"; pinctrl-0 = <&dcmi_pins_b>; pinctrl-1 = <&dcmi_sleep_pins_b>; port { dcmi_0: endpoint { remote-endpoint = <&ov5640_0>; bus-width = <8>; hsync-active = <0>; vsync-active = <0>; pclk-sample = <1>; pclk-max-frequency = <77000000>; }; }; }; &dma1 { sram = <&dma_pool>; }; &dma2 { sram = <&dma_pool>; }; &dts { status = "okay"; }; ðernet0 { status = "okay"; pinctrl-0 = <ðernet0_rgmii_pins_a>; pinctrl-1 = <ðernet0_rgmii_pins_sleep_a>; pinctrl-names = "default", "sleep"; phy-mode = "rgmii-id"; max-speed = <1000>; phy-handle = <&phy0>; mdio0 { #address-cells = <1>; #size-cells = <0>; compatible = "snps,dwmac-mdio"; phy0: ethernet-phy@0 { reg = <0>; }; }; }; &gpu { contiguous-area = <&gpu_reserved>; status = "okay"; }; &hash1 { status = "okay"; }; &ipcc { status = "okay"; }; &i2c1 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&i2c1_pins_b>; pinctrl-1 = <&i2c1_pins_sleep_b>; i2c-scl-rising-time-ns = <100>; i2c-scl-falling-time-ns = <7>; status = "okay"; /delete-property/dmas; /delete-property/dma-names; stusb1600@28 { compatible = "st,stusb1600"; reg = <0x28>; interrupts = <2 IRQ_TYPE_EDGE_FALLING>; interrupt-parent = <&gpiog>; pinctrl-names = "default"; pinctrl-0 = <&stusb1600_pins_b>; status = "okay"; vdd-supply = <&vin>; connector { compatible = "usb-c-connector"; label = "USB-C"; power-role = "dual"; power-opmode = "default"; port { con_usbotg_hs_ep: endpoint { remote-endpoint = <&usbotg_hs_ep>; }; }; }; }; typec: fusb302@22 { compatible = "fcs,fusb302","fairchild,fusb302"; reg = <0x22>; pinctrl-names = "default"; pinctrl-0 = <&stusb1600_pins_b>; int-n-gpios = <&gpiog 2 GPIO_ACTIVE_HIGH>; vbus-5v-gpios = <&gpioz 6 GPIO_ACTIVE_HIGH>; status = "okay"; connector { compatible = "usb-c-connector"; label = "USB-C"; power-role = "dual"; power-opmode = "default"; try-power-role = "sink"; source-pdos = <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)>; sink-pdos = <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM) PDO_VAR(3000, 12000, 3000) PDO_PPS_APDO(3000, 11000, 3000)>; op-sink-microwatt = <10000000>; }; }; }; &i2c2 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&i2c2_pins_a>; pinctrl-1 = <&i2c2_pins_sleep_a>; i2c-scl-rising-time-ns = <185>; i2c-scl-falling-time-ns = <20>; status = "okay"; /delete-property/dmas; /delete-property/dma-names; hdmi: hdmi-transmitter@39 { compatible = "sil,sii9022"; reg = <0x39>; iovcc-supply = <&v3v3_hdmi>; cvcc12-supply = <&v1v2_hdmi>; reset-gpios = <&gpioa 3 GPIO_ACTIVE_LOW>; interrupts = <6 IRQ_TYPE_EDGE_FALLING>; interrupt-parent = <&gpioh>; #sound-dai-cells = <1>; status = "okay"; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; sii9022_in: endpoint { remote-endpoint = <<dc_ep0_out>; }; }; port@3 { reg = <3>; sii9022_tx_endpoint: endpoint { remote-endpoint = <&i2s2_endpoint>; }; }; }; }; }; &i2c4 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&i2c4_pins_a>; pinctrl-1 = <&i2c4_pins_sleep_a>; i2c-scl-rising-time-ns = <185>; i2c-scl-falling-time-ns = <20>; status = "okay"; /delete-property/dmas; /delete-property/dma-names; pcf8563@51{ compatible = "nxp,pcf8563"; irq_gpio = <&gpioi 3 IRQ_TYPE_EDGE_FALLING>; reg = <0x51>; }; #if 0 wm8960: wm8960@1a { compatible = "wlf,wm8960"; reg = <0x1a>; #sound-dai-cells = <0>; status = "okay"; //wlf,shared-lrclk; wlf,capless; clocks = <&sai2a>; clock-names = "MCLK1"; ports { #address-cells = <1>; #size-cells = <0>; wm8960_tx_port: port@0 { reg = <0>; wm8960_tx_endpoint: endpoint { remote-endpoint = <&sai2a_endpoint>; }; }; wm8960_rx_port: port@1 { reg = <1>; wm8960_rx_endpoint: endpoint { remote-endpoint = <&sai2b_endpoint>; }; }; }; }; #else cs42l51: cs42l51@4a { compatible = "cirrus,cs42l51"; reg = <0x4a>; #sound-dai-cells = <0>; VL-supply = <&v3v3>; VD-supply = <&v1v8_audio>; VA-supply = <&v1v8_audio>; VAHP-supply = <&v1v8_audio>; reset-gpios = <&gpioz 7 GPIO_ACTIVE_LOW>; clocks = <&sai2a>; clock-names = "MCLK"; status = "okay"; cs42l51_port: port { #address-cells = <1>; #size-cells = <0>; cs42l51_tx_endpoint: endpoint@0 { reg = <0>; remote-endpoint = <&sai2a_endpoint>; frame-master; bitclock-master; }; cs42l51_rx_endpoint: endpoint@1 { reg = <1>; remote-endpoint = <&sai2b_endpoint>; frame-master; bitclock-master; }; }; }; #endif }; &i2c5 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&i2c5_pins_a>; pinctrl-1 = <&i2c5_pins_sleep_a>; i2c-scl-rising-time-ns = <100>; i2c-scl-falling-time-ns = <7>; status = "okay"; /delete-property/dmas; /delete-property/dma-names; ap3216c@1e { compatible = "LiteOn,ap3216c"; reg = <0x1e>; }; ov5640: camera@3c { compatible = "ovti,ov5640"; reg = <0x3c>; clocks = <&clk_ext_camera>; clock-names = "xclk"; DOVDD-supply = <&v2v8>; powerdown-gpios = <&gpioe 11 (GPIO_ACTIVE_HIGH | GPIO_PUSH_PULL)>; reset-gpios = <&gpioe 1 (GPIO_ACTIVE_LOW | GPIO_PUSH_PULL)>; rotation = <180>; status = "okay"; port { ov5640_0: endpoint { remote-endpoint = <&dcmi_0>; bus-width = <8>; data-shift = <2>; hsync-active = <0>; vsync-active = <0>; pclk-sample = <1>; pclk-max-frequency = <77000000>; }; }; }; }; &i2s2 { clocks = <&rcc SPI2>, <&rcc SPI2_K>, <&rcc PLL3_Q>, <&rcc PLL3_R>; clock-names = "pclk", "i2sclk", "x8k", "x11k"; pinctrl-names = "default", "sleep"; pinctrl-0 = <&i2s2_pins_a>; pinctrl-1 = <&i2s2_pins_sleep_a>; status = "okay"; i2s2_port: port { i2s2_endpoint: endpoint { remote-endpoint = <&sii9022_tx_endpoint>; format = "i2s"; mclk-fs = <256>; }; }; }; &iwdg2 { timeout-sec = <32>; status = "okay"; }; <dc { pinctrl-names = "default", "sleep"; pinctrl-0 = <<dc_pins_b>; pinctrl-1 = <<dc_pins_sleep_b>; status = "okay"; port { #address-cells = <1>; #size-cells = <0>; ltdc_ep0_out: endpoint@0 { reg = <0>; remote-endpoint = <&sii9022_in>; }; }; }; &m4_rproc { memory-region = <&retram>, <&mcuram>, <&mcuram2>, <&vdev0vring0>, <&vdev0vring1>, <&vdev0buffer>; mboxes = <&ipcc 0>, <&ipcc 1>, <&ipcc 2>; mbox-names = "vq0", "vq1", "shutdown"; interrupt-parent = <&exti>; interrupts = <68 1>; wakeup-source; status = "okay"; }; &rng1 { status = "okay"; }; &sai2 { clocks = <&rcc SAI2>, <&rcc PLL3_Q>, <&rcc PLL3_R>; clock-names = "pclk", "x8k", "x11k"; pinctrl-names = "default", "sleep"; pinctrl-0 = <&sai2a_pins_a>, <&sai2b_pins_b>; pinctrl-1 = <&sai2a_sleep_pins_a>, <&sai2b_sleep_pins_b>; status = "okay"; sai2a: audio-controller@4400b004 { #clock-cells = <0>; dma-names = "tx"; clocks = <&rcc SAI2_K>; clock-names = "sai_ck"; status = "okay"; sai2a_port: port { sai2a_endpoint: endpoint { remote-endpoint = <&cs42l51_tx_endpoint>; format = "i2s"; mclk-fs = <256>; dai-tdm-slot-num = <2>; dai-tdm-slot-width = <32>; }; }; }; sai2b: audio-controller@4400b024 { dma-names = "rx"; st,sync = <&sai2a 2>; clocks = <&rcc SAI2_K>, <&sai2a>; clock-names = "sai_ck", "MCLK"; status = "okay"; sai2b_port: port { sai2b_endpoint: endpoint { remote-endpoint = <&cs42l51_rx_endpoint>; format = "i2s"; mclk-fs = <256>; dai-tdm-slot-num = <2>; dai-tdm-slot-width = <32>; }; }; }; }; &sai4 { clocks = <&rcc SAI4>, <&rcc PLL3_Q>, <&rcc PLL3_R>; clock-names = "pclk", "x8k", "x11k"; status = "okay"; sai4a: audio-controller@50027004 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&sai4a_pins_a>; pinctrl-1 = <&sai4a_sleep_pins_a>; dma-names = "tx"; clocks = <&rcc SAI4_K>; clock-names = "sai_ck"; st,iec60958; status = "okay"; sai4a_port: port { sai4a_endpoint: endpoint { remote-endpoint = <&spdif_out_endpoint>; }; }; }; }; &sdmmc1 { pinctrl-names = "default", "opendrain", "sleep"; pinctrl-0 = <&sdmmc1_b4_pins_a>; pinctrl-1 = <&sdmmc1_b4_od_pins_a>; pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>; broken-cd; st,neg-edge; bus-width = <4>; vmmc-supply = <&v3v3>; status = "okay"; }; &sdmmc2 { pinctrl-names = "default", "opendrain", "sleep"; pinctrl-0 = <&sdmmc2_b4_pins_a>; pinctrl-1 = <&sdmmc2_b4_od_pins_a>; pinctrl-2 = <&sdmmc2_b4_sleep_pins_a>; non-removable; st,neg-edge; bus-width = <8>; vmmc-supply = <&v3v3>; keep-power-in-suspend; status = "okay"; }; &sdmmc3 { arm,primecell-periphid = <0x10153180>; pinctrl-names = "default", "opendrain", "sleep"; pinctrl-0 = <&sdmmc3_b4_pins_a>; pinctrl-1 = <&sdmmc3_b4_od_pins_a>; pinctrl-2 = <&sdmmc3_b4_sleep_pins_a>; non-removable; st,neg-edge; bus-width = <4>; vmmc-supply = <&v3v3>; status = "okay"; keep-power-in-suspend; }; &spdifrx { pinctrl-names = "default", "sleep"; pinctrl-0 = <&spdifrx_pins_a>; pinctrl-1 = <&spdifrx_pins_a>; status = "okay"; spdifrx_port: port { spdifrx_endpoint: endpoint { remote-endpoint = <&spdif_in_endpoint>; }; }; }; &sram { dma_pool: dma_pool@0 { reg = <0x50000 0x10000>; pool; }; }; &spi1 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&spi1_pins_a>; pinctrl-1 = <&spi1_sleep_pins_a>; cs-gpios = <&gpioz 3 GPIO_ACTIVE_LOW>; status = "okay"; spidev: icm20608@0 { compatible = "alientek,icm20608"; reg = <0>; /* CS #0 */ spi-max-frequency = <8000000>; }; }; &timers4 { status = "okay"; /* spare dmas for other usage */ /delete-property/dmas; /delete-property/dma-names; pwm4: pwm { pinctrl-0 = <&pwm4_pins_b>; pinctrl-1 = <&pwm4_sleep_pins_b>; pinctrl-names = "default", "sleep"; #pwm-cells = <2>; status = "okay"; }; }; &usart3 { pinctrl-names = "default", "sleep", "idle"; pinctrl-0 = <&usart3_pins_c>; pinctrl-1 = <&usart3_sleep_pins_c>; pinctrl-2 = <&usart3_idle_pins_c>; /delete-property/dmas; /delete-property/dma-names; status = "okay"; }; &uart4 { pinctrl-names = "default", "sleep", "idle", "no_console_suspend"; pinctrl-0 = <&uart4_pins_a>; pinctrl-1 = <&uart4_sleep_pins_a>; pinctrl-2 = <&uart4_idle_pins_a>; pinctrl-3 = <&uart4_pins_a>; /delete-property/dmas; /delete-property/dma-names; status = "okay"; }; &uart5 { pinctrl-names = "default", "sleep", "idle"; pinctrl-0 = <&uart5_pins_a>; pinctrl-1 = <&uart5_sleep_pins_a>; pinctrl-2 = <&uart5_idle_pins_a>; /delete-property/dmas; /delete-property/dma-names; status = "okay"; }; &uart7 { pinctrl-names = "default", "sleep", "idle"; pinctrl-0 = <&uart7_pins_b>; pinctrl-1 = <&uart7_sleep_pins_b>; pinctrl-2 = <&uart7_idle_pins_b>; /delete-property/dmas; /delete-property/dma-names; st,hw-flow-ctrl; status = "okay"; }; &usbh_ehci { phys = <&usbphyc_port0>; status = "okay"; }; &usbotg_hs { phys = <&usbphyc_port1 0>; phy-names = "usb2-phy"; usb-role-switch; status = "okay"; port { usbotg_hs_ep: endpoint { remote-endpoint = <&con_usbotg_hs_ep>; }; }; }; &usbphyc { status = "okay"; }; &usbphyc_port0 { phy-supply = <&vdd_usb>; st,phy-tuning = <&usb_phy_tuning>; }; &usbphyc_port1 { phy-supply = <&vdd_usb>; st,phy-tuning = <&usb_phy_tuning>; };至此,编译正点原子的出厂Linux内核源码完成。