当前位置: 首页 > news >正文

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内核源码完成。

相关文章:

Linux第48步_编译正点原子的出厂Linux内核源码

编译正点原子的出厂 Linux 内核源码&#xff0c;为后面移植linux做准备。研究对象如下&#xff1a; 1)、linux内核镜像文件“uImage” 路径为“arch/arm/boot”&#xff1b; 2)、设备树文件“stm32mp157d-atk.dtb” 路径为“arch/arm/boot/dts” 3)、默认配置文件“stm32m…...

程序员为什么不喜欢关电脑?

程序员为什么不喜欢关电脑&#xff1f; 本人40 最近待业。&#xff0c;希望 3月前能再就业吧&#xff01;就不喜欢关电脑 这个问题来说是不好习惯。毕竟你的电脑不是服务器&#xff0c;哈哈。但是程序员都很懒&#xff0c;能自动化的&#xff0c;就让机器干。我在此之前 也工作…...

【初始RabbitMQ】了解和安装RabbitMQ

RabbitMQ的概念 RabbitMQ是一个消息中间件&#xff1a;他可以接受并转发消息。例如你可以把它当做一个快递站点&#xff0c;当你要发送一个包 裹时&#xff0c;你把你的包裹放到快递站&#xff0c;快递员最终会把你的快递送到收件人那里&#xff0c;按照这种逻辑 RabbitMQ 是 …...

Linux第56步_根文件系统第3步_将busybox构建的根文件系统烧录到EMMC

1、第1次将“rootfs”打包 1)、打开第1个终端&#xff0c;准备在“mnt”目录下创建挂载目录“rootfs”&#xff1b; 输入“ls回车” 输入“cd /mnt回车” 输入“ls回车”&#xff0c;查看“mnt”目录下的文件和文件夹 输入“sudo mkdir rootfs回车”&#xff0c;在“mnt”…...

Linux进程间通信(三)-----System V消息队列

消息队列的概念及原理 消息队列实际上就是在系统当中创建了一个队列&#xff0c;队列当中的每个成员都是一个数据块&#xff0c;这些数据块都由类型和信息两部分构成&#xff0c;两个互相通信的进程通过某种方式看到同一个消息队列&#xff0c;这两个进程向对方发数据时&#x…...

Elasticsearch:混合搜索是 GenAI 应用的未来

在这个竞争激烈的人工智能时代&#xff0c;自动化和数据为王。 从庞大的存储库中有效地自动化搜索和检索信息的过程的能力变得至关重要。 随着技术的进步&#xff0c;信息检索方法也在不断进步&#xff0c;从而导致了各种搜索机制的发展。 随着生成式人工智能模型成为吸引力的中…...

态、势、感、知的偏序、全序与无序

在态势感知中&#xff0c;"态"、"势"、"感"和"知"可以被理解为描述不同层次的概念。而在偏序、全序和无序方面&#xff0c;它们可以有不同的关系&#xff0c;简单地说&#xff0c;偏序关系表示部分的可比较性&#xff0c;全序关系表示…...

【从Python基础到深度学习】 8. VIM两种状态

一、安装 sudo apt install vim 二、VIM两种模式 - 命令状态/编辑状态 1.1 进入/退出VIM 进入VIM vim 退出vim :q <enter> 2.2 根目录下添加配置文件 window下创建vimrc类型文件内容如下&#xff1a; set nu set cursorline set hlsearch set tabstop4 使用Wins…...

java微服务面试篇

目录 目录 SpringCloud Spring Cloud 的5大组件 服务注册 Eureka Nacos Eureka和Nacos的对比 负载均衡 负载均衡流程 Ribbon负载均衡策略 自定义负载均衡策略 熔断、降级 服务雪崩 服务降级 服务熔断 服务监控 为什么需要监控 服务监控的组件 skywalking 业务…...

OpenAI 生成视频模型 Sora 论文翻译

系列文章目录 前言 视频生成模型作为世界模拟器 本技术报告的重点是 (1) 将所有类型的视觉数据转换为统一表示&#xff0c;以便对生成模型进行大规模训练的方法&#xff0c;以及 (2) 对索拉的能力和局限性的定性评估。 该报告不包括模型和实现细节。 许多先前的工作使用各种方…...

2.13日学习打卡----初学RocketMQ(四)

2.13日学习打卡 目录&#xff1a; 2.13日学习打卡一.RocketMQ之Java ClassDefaultMQProducer类DefaultMQPushConsumer类Message类MessageExt类 二.RocketMQ 消费幂消费过程幂等消费速度慢的处理方式 三.RocketMQ 集群服务集群特点单master模式多master模式多master多Slave模式-…...

ZigBee学习——BDB

✨本博客参考了善学坊的教程&#xff0c;并总结了在实现过程中遇到的问题。 善学坊官网 文章目录 一、BDB简介二、BDB Commissioning Modes2.1 Network Steering2.2 Network Formation2.3 Finding and Binding&#xff08;F & B&#xff09;2.4 Touchlink 三、BDB Commissi…...

使用Docker快速部署MySQL

部署MySQL 使用Docker安装&#xff0c;仅仅需要一步即可&#xff0c;在命令行输入下面的命令 docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123456 \mysql MySQL安装完毕&#xff01;通过任意客户端工具即可连接到MySQL. 当我们执…...

力扣热题100_滑动窗口_3_无重复字符的最长子串

文章目录 题目链接解题思路解题代码 题目链接 3. 无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示…...

RM电控工程讲义

HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) 是一个回调函数&#xff0c;通常在STM32的HAL库中用于处理CAN&#xff08;Controller Area Network&#xff09;接收FIFO 0中的消息。当CAN接口在FIFO 0中有待处理的消息时&#xff0c;这个函数会被调用。 HAL库C…...

论文阅读:《Deep Learning-Based Human Pose Estimation: A Survey》——Part 1:2D HPE

目录 人体姿态识别概述 论文框架 HPE分类 人体建模模型 二维单人姿态估计 回归方法 目前发展 优化 基于热图的方法 基于CNN的几个网络 利用身体结构信息提供构建HPE网络 视频序列中的人体姿态估计 2D多人姿态识别 方法 自上而下 自下而上 2D HPE 总结 数据集…...

C语言——oj刷题——杨氏矩阵

目录 1. 理解杨氏矩形的特点 2. 实现杨氏矩形查找算法 3. 编写示例代码 当我们谈到杨氏矩形时&#xff0c;我们指的是一种在二维数组中查找目标元素的高效算法。它是由杨氏&#xff08;Yan Shi&#xff09;教授提出的&#xff0c;因此得名为杨氏矩形。 杨氏矩形问题的场景是…...

C++ 50道面试题

1. static关键字 1.全局static变量 存储位置&#xff1a;静态存储区&#xff0c;在程序运行期间一直存在 初始化&#xff1a; 未手动初始化的变量自动初始化为0 作用域&#xff1a; 从定义之处开始&#xff0c;到文件结束&#xff0c;仅能在本文件中使用 2.局部static变量…...

寒假学习记录14:JS字符串

目录 查找字符串中的特定元素 String.indexOf() &#xff08;返回索引值&#xff09; 截取字符串的一部分 .substring() &#xff08;不影响原数组&#xff09;&#xff08;不允许负值&#xff09; 截取字符串的一部分 .slice() &#xff08;不影响原数…...

【数学建模】【2024年】【第40届】【MCM/ICM】【C题 网球运动中的“动量”】【解题思路】

一、题目 &#xff08;一&#xff09; 赛题原文 2024 MCM Problem C: Momentum in Tennis In the 2023 Wimbledon Gentlemen’s final, 20-year-old Spanish rising star Carlos Alcaraz defeated 36-year-old Novak Djokovic. The loss was Djokovic’s first at Wimbledon…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...