当前位置:首页 > CN2资讯 > 正文内容

linux devmem源码 linux源码在哪

2天前CN2资讯


编译正点原子的出厂 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内核源码完成。

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/25819.html

    分享给朋友:

    “linux devmem源码 linux源码在哪” 的相关文章

    VPS是什么?全面解析虚拟专用服务器的优势与选择

    VPS 是 什么 VPS,全称虚拟专用服务器,是一种通过虚拟化技术在物理服务器上创建多个独立环境的方案。具体来说,每个VPS都能运行自己的操作系统,并拥有独立的CPU、内存和存储资源。这就意味着,用户可以像在独立服务器上那样自由管理自己的VPS,进行各种应用和服务的部署。 最初,当我接触到VPS时,...

    腾讯云与Cloudflare的比较分析:助力企业数字化转型的最佳选择

    在数字化转型的浪潮下,越来越多的企业开始依赖云计算技术来推动业务发展。其中,腾讯云和Cloudflare作为行业的佼佼者,吸引了广泛的关注。腾讯云是腾讯集团倾力打造的云计算品牌,凭借强大的技术背景和丰富的产品线,逐渐成为全球知名的云计算服务商。它的基础设施覆盖全球五大洲,运营于58个可用区,能够为不...

    莱卡云:高性价比云服务器解决方案,助力企业发展

    莱卡云概述 莱卡云,这个名字你或许已经听说过。成立于2019年,它在云计算服务领域迅速崭露头角,成为一些企业的首选合作伙伴。凭借持有的多个《中华人民共和国增值电信业务经营许可证》,莱卡云有效地展开了多种多样的服务,充分满足了市场需求。与三大公有云的合作让它在竞争激烈的市场中站稳了脚跟,提供的解决方案...

    AMD EPYC 7002处理器:高性能与高能效的完美结合

    我一直对AMD EPYC 7002系列处理器充满兴趣。这款处理器是AMD公司最新推出的服务器处理器,确实让人感到兴奋。基于现代的Zen 2架构,这款处理器融合了先进的7nm制程工艺,投放市场后便以其高性能和高能效著称。随着数据中心和云计算需求的不断增加,EPYC 7002系列成了一个热议的话题,来看...

    香港VPS推荐:如何选择适合你的虚拟私人服务器

    在进入VPS的世界之前,理解什么是VPS非常重要。VPS,全称为虚拟私人服务器,它实际上是利用物理服务器上的资源,通过虚拟化技术,创建出多个独立的小型服务器。这种方式使得每个VPS都可以运行自己的操作系统,用户可以自由配置和管理,就像拥有一台独立的服务器一样。其实,我最初接触VPS时,正是被这种独立...

    VPS测速:优化服务器性能与用户体验的关键工具

    当谈到网络服务时,VPS(虚拟专用服务器)是一个绕不开的话题。它为用户提供了一个灵活且高效的网络环境,通过虚拟化技术将一台物理服务器分割成多个独立的虚拟服务器。用户可以拥有自己的操作系统、存储空间和带宽,这使得VPS成为了许多企业和个人的理想选择。 通过使用VPS,用户能够执行各种任务,比如搭建网站...