Linux第48步_编译正点原子的出厂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- distclean

#清除工程,删除“.config”文件,执行1次即可,以后就不要再执行了。

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- stm32mp1_atk_defconfig

#设置为默认配置,执行1次即可,以后就不需要执行该语句了。

#“stm32mp1_atk_defconfig”位于“arch/arm/configs”目录下;

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- menuconfig

#打开图形化配置界面

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- uImage dtbs LOADADDR=0XC2000040 -j8

#编译镜像文件和设备树,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 <alexandre.torgue@st.com> 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 1sound: 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";};
#elsesound: 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";
};&ethernet0 {status = "okay";pinctrl-0 = <&ethernet0_rgmii_pins_a>;pinctrl-1 = <&ethernet0_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 = <&ltdc_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 0wm8960: 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>;};};};};
#elsecs42l51: 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";
};&ltdc {pinctrl-names = "default", "sleep";pinctrl-0 = <&ltdc_pins_b>;pinctrl-1 = <&ltdc_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内核源码完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/466286.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA Ultimate下载(采用JetBrain学生认证)

IDEA Ultimate版本下载 Ulitmate是无限制版&#xff08;解锁所有插件&#xff0c;正版需要付费。学生可以免费申请许可&#xff09;Community是开源社区版本&#xff08;部分插件不提供使用&#xff0c;比如Tomcat插件。免费&#xff09; 我们将通过学生认证获取免费版。 Je…

线性判别分析(LDA)

一、说明 LDA 是一种监督降维和分类技术。其主要目的是查找最能分隔数据集中两个或多个类的特征的线性组合。LDA 的主要目标是找到一个较低维度的子空间&#xff0c;该子空间可以最大限度地区分不同类别&#xff0c;同时保留与歧视相关的信息。 LDA 是受监督的&#xff0c;这意…

PKI - 借助Nginx实现_客户端使用自签证书供服务端验证

文章目录 Pre概述在 Nginx 中实现客户端使用自签名证书供服务器验证1. 生成客户端密钥对2. 生成自签名客户端证书3. 配置 Nginx4. 重启 Nginx 修5. 验证 在浏览器中安装客户端证书以便进行访问 Pre PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证 PKI - 数…

接口测试框架分析

框架大体上已经写完了&#xff0c;不过说实话好多代码让我自己写我也写不出来&#xff0c;那该怎么办呢&#xff1f;很简单&#xff0c;把现在已经写好的代码保存起来&#xff0c;等用的时候拿出来复制粘贴就好了&#xff0c;如果你是大神&#xff0c;自己会写&#xff0c;那就…

mxxWechatBot主动发送消息至微信

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 免责声明&#xff1a;该工具仅供学习使用&#xff0c;禁止使用该工具从事违法活动&#xff0c;否则永久拉黑封禁账号&#xff01;&#xff01;&#xff01;本人不对任何工具的使用负责&am…

C++多态重难点

CSDN上已经有很多关于C多态方面的一些系统介绍了&#xff0c;但是我看了一下一些有关于多态问题的细节问题文章较少&#xff0c;因此我想要出一片文章重点讲一讲我认为比较重点且容易被遗忘的知识点&#xff0c;一些比较基本的知识这里就不过多赘述了&#xff0c;可以参考其他优…

AtCoder Beginner Contest 340(A-G)

A - Arithmetic Progression (atcoder.jp) 1.思路&#xff1a;循环输出即可 2.代码&#xff1a; #include <bits/stdc.h> #define rep(i,z,n) for(int i z;i < n; i) #define per(i,n,z) for(int i n;i > z; i--) #define PII pair<int,int> #define fi f…

2024年2月5日-2月11日周报

论文阅读 1. 本周计划2. 完成情况2.1 论文摘要2.2 网络结构2.3 损失函数2.4 优化器2.5 代码2.5.1 代码结果2.5.2 代码大致流程 4. 总结及收获4. 下周计划 1. 本周计划 阅读论文《Data-Driven Seismic Waveform Inversion: A Study on the Robustness and Generalization》并实…

TELNET 远程终端协议

远程终端协议 TELNET TELNET 是一个简单的远程终端协议&#xff0c;也是互联网的正式标准。 用户用 TELNET 就可在其所在地通过 TCP 连接注册&#xff08;即登录&#xff09;到远地的另一个主机上&#xff08;使用主机名或 IP 地址&#xff09;。 TELNET 能将用户的击键传到…

为什么总有人觉得前端很简单?尤其是水平半瓶水的人。

造成这个印象的原因很多&#xff0c;贝格前端工场结合自己的经验&#xff0c;为大家揭开这个谜底。低端的前端确实简单&#xff0c;但是高级阶段确实不简单。 缺乏深入了解&#xff1a; 有些人可能只是对前端开发有一些浅显的了解&#xff0c;没有深入研究过前端开发的技术和知…

T-Sql 也能更新修改查询JSON?

今天看见一个澳洲项目里面使用了 JSON_VALUE 这样的函数解析 JSON 我倍感诧异&#xff0c;我印象当中Sql Server并不支持JOSN的相关操作&#xff0c;他最多只把JSON当成一个字符串来存储&#xff0c;更不要说去解析&#xff0c;查询和更新了 我随后查询了下此函数&#xff0c;…

第三节 zookeeper基础应用与实战2

目录 1. Watch事件监听 1.1 一次性监听方式&#xff1a;Watcher 1.2 Curator事件监听机制 2. 事务&异步操作演示 2.1 事务演示 2.2 异步操作 3. Zookeeper权限控制 3.1 zk权限控制介绍 3.2 Scheme 权限模式 3.3 ID 授权对象 3.4 Permission权限类型 3.5 在控制台…