当前位置: 首页 > 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…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...