【系统移植三】uboot移植

开发板类型:emmc、7寸屏

1 NXP官方开发板uboot编译测试

1.1 获取源码

1)源码路径:1、例程源码->4、NXP 官方原版 Uboot 和 Linux -> uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2。
2)将源码拷贝到ubuntu中的~/linux/IMX6ULL/uboot/temp目录下,解压。解压后入下图所示:
在这里插入图片描述

1.2 编译

1 配置
在编译之前首先要配置uboot,uboot的配置文件在configs目录下,因为开发是使用的是14x14mm尺寸的芯片,emmc版本,所以关注官方的 mx6ull_14x14_evk_emmc_defconfig配置文件。
2 编译
编写脚本/mx6ull_14x14_evk_emmc.sh,内如如下

#!/bin/bashmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distcleanmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfigmake V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16

给脚本可执行权限,执行脚本

./mx6ull_14x14_evk_emmc.sh

3 烧写验证
1)烧写
将逻辑开发时用到的下载软件imxdownload拷贝到该目录下,使用下面语句下载到SD卡中。

chmos 777 imxdownload
./imxdownload u-boot.bin /dev/sdb

sdb是SD卡,下载后将SD卡插入开发版的板槽,打开MobaXterm软件,设置好串口并打开,复位开发板后可以看到如下信息:
在这里插入图片描述
2)SD卡和emmc驱动检查
使用如下命令验证SD卡和emmc,

mmc list     	//查看设备中的mmc设备
mmc dev 0/1		//切换mmc设备
mmc info		//查看mmc设备信息

查看结果如下,SD卡和emmc都可以查到。
在这里插入图片描述
3)LCD检查
因为开发板上链接的是7寸屏,所以不会显示NXP的logo
4)网络检查
uboot启动的时候提示“Board Net Initialization Failed”和“No ethernet found.”这两行,说明网络驱动也是有问题的。这是因为开发版的网络芯片复位引脚和NXP官方开发版不一样,因此需要修改驱动。

4 总结
移植NXP官方I.MX6ULL EVK开发板的uboot到正点原子EMMC开发板上的运行情况:

  1. uboot启动正常,DRAM识别正确,SD卡和EMMC驱动正常
  2. uboot里面的LCD默认是4.3寸480写72分辨率的,其他分辨率需修改
  3. 网络不能正常工作,识别不出网络信息,需要修改

移植需要做的工作:
4. 在uboot中添加自己的开发板
5. 解决LCD和网络驱动问题

2 在U-boot中添加自己的开发板

2.1 添加开发板默认配置文件

1)所在目录:configures
2)复制文件:mx6ull_14x14_evk_emmc_defconfig
3)重命名为:mx6ull_alientek_emmc_defconfig
命令如下:

cd configs
cp mx6ull_14x14_evk_emmc_defconfig mx6ull_alientek_emmc_defconfig

4)修改内容:
然后将文件mx6ull_alientek_emmc_defconfig中的内容改成下面内容:

CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_alientek_emmc/imximage.cfg,MX6ULL_EVK_EMMC_REWORK"
CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_TARGET_MX6ULL_ALIENTEK_EMMC=y
CONFIG_CMD_GPIO=y

可以看出只修改了第1行和第4行

2.2 添加开发板对应的头文件

1)目录:include/configs
2)复制文件:mx6ullevk.h
3)重命令为:mx6ull_alientek_emmc.h
命令如下:

cp include/configs/mx6ullevk.h include/configs/mx6ull_alientek_emmc.h

4)修改内容:

#ifndef __MX6ULLEVK_CONFIG_H
#define __MX6ULLEVK_CONFIG_H

修改为:

#ifndef __MX6ULL_ALIENTEK_EMMC_CONFIG_H
#define __MX6ULL_ALIENTEK_EMMC_CONFIG_H

这里面有很多宏定义,这些宏基本是用来配置uboot的,也有些是I.MX6ULL的配置项,如果项使能或者禁止uboot的某些功能,则修改本文件。里面内容较多在后面详细记录。

2.3 添加开发板对应的板级文件

uboot的每个板子都有一个对应的文件夹用来存放板级文件,I.MX系列芯片的板级文件在board/freescale目录下。
1)目录:board/freescal
2)复制文件:mx6ullevk
3)重命名为:mx6ull_alientek_emmc
命令如下:

cd board/freescal
cp -r mx6ullevk mx6ull_alientek_emmc

4)进入mx6ull_alientek_emmc目录,将mx6ullevk.c重命名为mx6ull_alientek_emmc.c,命令如下:

cd mx6ull_alientek_emmc
mv mx6ullevk.c mx6ull_alientek_emmc

5)修改mx6ull_alientek_emmc内容:

  1. 修改Makefile文件
    修改内容如下:
    在这里插入图片描述

    重点是红框内容,这样才会编译mx6ull_alientek_emmc.c

  2. 修改imximage.cfg文件

    PLUGIN board/freescale/mx6ullevk/plugin.bin 0x00907000
    

    改为:

    PLUGIN board/freescale/mx6ull_alientek_emmc /plugin.bin 0x00907000
    
  3. 修改Kconfig文件

     if TARGET_MX6ULL_ALIENTEK_EMMCconfig SYS_BOARDdefault "mx6ull_alientek_emmc"config SYS_VENDORdefault "freescale"config SYS_SOCdefault "mx6"config SYS_CONFIG_NAMEdefault "mx6ull_alientek_emmc"endif
    
  4. 修改MAINTAINERS文件

    MX6ULLEVK BOARD
    M:  Peng Fan <peng.fan@nxp.com>
    S:  Maintained
    F:  board/freescale/mx6ull_alientek_emmc/
    F:  include/configs/mx6ull_alientek_emmc.h
    F:  configs/mx6ull_alientek_emmc_defconfig
    

2.4 修改U-boot图形界面配置文件

1)修改文件:arch/arm/cpu/armv7/mx6/Kconfig
2)修改内容:
在207行加入如下内容:

201 config TARGET_MX6ULL_9X9_EVK
202     bool "Support mx6ull_9x9_evk"
203     select MX6ULL
204     select DM
205     select DM_THERMAL
206 
207 config TARGET_MX6ULL_ALIENTEK_EMMC
208     bool "Support mx6ull_alientek_emmc"
209     select MX6ULL
210     select DM
211     select DM_THERMAL
212 
213 config TARGET_SECOMX6
214     bool "secomx6 boards"

在最后一行的endif前添加如下内容:

 source "board/freescale/mx6ull_alientek_emmc/Kconfig"

2.5 使用新添加的板子编译uboot

1)在uboot跟目录新建一个名为mx6ull_alientek_emmc.sh的脚本,内容如下:

#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_alientek_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16

2)执行脚本,脚本要有可执行权限

./imx6ull_alientek_emmc.sh

3)查看是否添加成功

grep -nr "mx6ull_alientek_emmc.h"

如果有很多文件都引用了mx6ull_alientek_emmc.h这个头文件,则说明板子添加成功,如图所示:
在这里插入图片描述
4)下载验证:
下载到SD卡中,开启开发板,在串口中可以看到如下信息:
在这里插入图片描述
此时屏幕上是无法显示NXP的logo的,因为屏幕驱动不正确,同时网络驱动也是有问题的。

2.6 LCD驱动修改

一般uboot的驱动修改都是在xxx.hxxx.c这两个文件中进行的。比如 mx6ull_alientek_emmc.h 和mx6ull_alientek_emmc.c 这两个文件。

1)一般修改LCD驱动重点注意一下几点:
①、LCD所使用的GPIO,查看uboot中LCD的IO配置是否正确
②、LCD背光引脚GPIO配置
③、LCD配置参数是否正确

2)正点原子的LCD原理图和NXP的相同,也就是LCD的IO和背光IO都一样,因此IO部分就不需要修改了。只修改LCD的参数即可

3)参数修改:
修改mx6ull_alientek_emmc.c文件
① 目录:board/freescale/mx6ull_alientek_emmc/mx6ull_alientek_emmc.c

② 修改内容:
找到display_info_t结构体,大约在780行,修改为如下内容

struct display_info_t const displays[] = {{.bus = MX6UL_LCDIF1_BASE_ADDR,.addr = 0,.pixfmt = 24,.detect = NULL,.enable = do_enable_parallel_lcd,.mode   = {.name           = "TFT7016",	//LCD 名字,要和环境变量中的 panel 相等.xres           = 1024,			//LCD X 轴和 Y 轴像素数量.yres           = 600,.pixclock       = 19531,		//像素时钟,每个像素时钟周期的长度,单位为皮秒.left_margin    = 140,			//HBP,水平同步后肩。.right_margin   = 160,			//HFP,水平同步前肩.upper_margin   = 20,			//VBP,垂直同步后肩。.lower_margin   = 12,			//VFP,垂直同步前肩。.hsync_len      = 20,			//HSPW,行同步脉宽。.vsync_len      = 3,			//VSPW,垂直同步脉宽。.sync           = 0,.vmode          = FB_VMODE_NONINTERLACED		//大多数使用 FB_VMODE_NONINTERLACED,也就是不使用隔行扫描
} } };

pixclock的计算方法:
7寸1024*600分辨率的屏幕像素时钟为51.2MHz

pixclock=(1/51200000)*10^12 = 19531

4)验证
重新编译代码,将编译出的u-boot.bin下载到SD卡中。重启开发板,此时屏幕上会显示NXP的logo。
若没有logo则查看环境变量panel是否为TFT7016,如果不是则用如下命令修改环境变量。

setenv panel TFT7016
saveenv

2.7 网络修改

开发板为2.4以前版本。使用的PHY芯片为LAN8720。正点原子 开发板 ENET1 引脚与NXP官方 I.MX6ULL EVK开发板只有复位引脚不同,I.MX6U-ALPHA 开发板 ENET1 上连接的 LAN8720A器件地址为 0X0,所以ENET1网络驱动的重点只有如下三点:
① ENET1复位引脚初始化
② LAN8720A的器件ID
③ LAN8720驱动

关于 ENET2 网络驱动的修改也注意一下三点:
① ENET2 的复位引脚,ENET2 的复位引脚 ENET2_RST 接到了I.MX6ULL 的 SNVS_TAMPER8 上。
② ENET2 所使用的 PHY 芯片器件地址,PHY 器件地址为 0X1。
③ LAN8720 驱动,ENET1 和 ENET2 都使用的 LAN8720,所以驱动肯定是一样的。

2.7.1 网络PHY芯片修改

打开mx6ull_alientek_emmc.h,所在目录:include/configs,修改内容如下:

325 #ifdef CONFIG_CMD_NET
326 #define CONFIG_CMD_PING
327 #define CONFIG_CMD_DHCP
328 #define CONFIG_CMD_MII
329 #define CONFIG_FEC_MXC
330 #define CONFIG_MII
331 #define CONFIG_FEC_ENET_DEV     1
332 
333 #if (CONFIG_FEC_ENET_DEV == 0)
334 #define IMX_FEC_BASE            ENET_BASE_ADDR
335 #define CONFIG_FEC_MXC_PHYADDR          0x0		//改为0
336 #define CONFIG_FEC_XCV_TYPE             RMII
337 #elif (CONFIG_FEC_ENET_DEV == 1)
338 #define IMX_FEC_BASE            ENET2_BASE_ADDR
339 #define CONFIG_FEC_MXC_PHYADDR      0x1
340 #define CONFIG_FEC_XCV_TYPE     RMII
341 #endif
342 #define CONFIG_ETHPRIME         "FEC"
343 
344 #define CONFIG_PHYLIB
345 #define CONFIG_PHY_SMSC		//这个地方修改为CONFIG_PHY_SMSC
346 #endif

2.7.2 删除uboot中的74LV595驱动代码

打开imx6ull_alientek_emmc.c

  1. 删除与74LV595有关代码
    1)将:

    #define IOX_SDI IMX_GPIO_NR(5, 10)
    #define IOX_STCP IMX_GPIO_NR(5, 7)
    #define IOX_SHCP IMX_GPIO_NR(5, 11)
    #define IOX_OE IMX_GPIO_NR(5, 8)
    

    替换为:

    #define ENET1_RESET IMX_GPIO_NR(5, 7)
    #define ENET2_RESET IMX_GPIO_NR(5, 8)
    

    因为正点原子没有使用74LV595,所以需要将与74LV595有关代码删掉,IOX开头的宏定义就是与74LV595有关的。
    ENET1 的复位引脚连接到 SNVS_TAMPER7 上,对应 GPIO5_IO07,ENET2 的复位引脚连接到 SNVS_TAMPER8 上,对应 GPIO5_IO08

    2)删除iox_pads[]数组、iox74lv_init()函数和iox74lv_set函数。
    3)删除board_init()函数中的 imx_iomux_v3_setup_multiple_padsiox74lv_init两行,这两行是用来初始化74lv595函数的

2.7.3 添加I.MX6ULL-ALPHA开发板网络复位引脚驱动

1)fec1_padsfec2_pads是ENET1和ENET2两个网口的IO配置参数,在这两个数组中添加两个网口的复位IO配置参数,完成以后如下图:

/** pin conflicts for fec1 and fec2, GPIO1_IO06 and GPIO1_IO07 can only* be used for ENET1 or ENET2, cannot be used for both.*/
static iomux_v3_cfg_t const fec1_pads[] = {MX6_PAD_GPIO1_IO06__ENET1_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL),MX6_PAD_GPIO1_IO07__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET1_TX_DATA0__ENET1_TDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET1_TX_DATA1__ENET1_TDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET1_TX_EN__ENET1_TX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 | MUX_PAD_CTRL(ENET_CLK_PAD_CTRL),MX6_PAD_ENET1_RX_DATA0__ENET1_RDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET1_RX_DATA1__ENET1_RDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET1_RX_ER__ENET1_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET1_RX_EN__ENET1_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_SNVS_TAMPER7__GPIO5_IO07 | MUX_PAD_CTRL(NO_PAD_CTRL),	//新添加
};static iomux_v3_cfg_t const fec2_pads[] = {MX6_PAD_GPIO1_IO06__ENET2_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL),MX6_PAD_GPIO1_IO07__ENET2_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET2_TX_DATA0__ENET2_TDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET2_TX_DATA1__ENET2_TDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET2_TX_CLK__ENET2_REF_CLK2 | MUX_PAD_CTRL(ENET_CLK_PAD_CTRL),MX6_PAD_ENET2_TX_EN__ENET2_TX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET2_RX_DATA0__ENET2_RDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET2_RX_DATA1__ENET2_RDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET2_RX_EN__ENET2_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET2_RX_ER__ENET2_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_SNVS_TAMPER8__GPIO5_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL),	//新添加
};

2)修改setup_iomux_fec函数,该函数根据fec1_pads和fec2_pads两个配置数组来初始化I.MX6ULL的网络IO。需要再该函数中添加网络复位IO的初始化代码,并且复位一下PHY芯片。修改后如下:

static void setup_iomux_fec(int fec_id)
{if (fec_id == 0){imx_iomux_v3_setup_multiple_pads(fec1_pads,ARRAY_SIZE(fec1_pads));//ENET1复位gpio_direction_output(ENET1_RESET, 1);gpio_set_value(ENET1_RESET, 0);mdelay(20);gpio_set_value(ENET1_RESET, 1);}else{imx_iomux_v3_setup_multiple_pads(fec2_pads,ARRAY_SIZE(fec2_pads));//ENET2复位gpio_direction_output(ENET2_RESET, 1);gpio_set_value(ENET2_RESET, 0);mdelay(20);gpio_set_value(ENET2_RESET, 1);}
}

2.7.4 修改drivers/net/phy/phy.c文件的函数

uboot的LAN8720的驱动有些问题,需要修改,打开文件
drivers/net/phy/phy.c,找到函数 genphy_update_link,这是个通用 PHY 驱动函数,此函数用于更新 PHY 的连接状态和速度。使用 LAN8720A 的时候需要在此函数中添加一些代码,修改后的函数 genphy_update_link 如下所示:

int genphy_update_link(struct phy_device *phydev)
{unsigned int mii_reg;
//新添加代码为ifdef部分
#ifdef CONFIG_PHY_SMSCstatic int lan8720_flag = 0;int bmcr_reg = 0;if (lan8720_flag == 0) {bmcr_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR);phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, BMCR_RESET);while(phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR) & 0X8000) {udelay(100);}phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, bmcr_reg);lan8720_flag = 1;}
#endif/** Wait if the link is up, and autonegotiation is in progress* (ie - we're capable and it's not done)*/mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR);
······
return 0;

2.7.5 下载验证

1)编译代码,下载到SD卡中,可以从串口助手上看到 Net:FEC1 字样,说明网络驱动配置成功。如下图所示:
在这里插入图片描述
2)修改环境变量,配置开发板网络:
1)配置网络:

setenv ipaddr 192.168.0.100  //开发板 IP 地址
setenv ethaddr b8:ae:1d:01:00:00 //开发板网卡 MAC 地址
setenv gatewayip 192.168.0.1 //开发板默认网关
setenv netmask 255.255.255.0  //开发板子网掩码
setenv serverip 192.168.0.12  //服务器地址,也就是 Ubuntu 地址
saveenv //保存环境变量

2)测试网络:

ping 192.168.0.12

结果如图:
在这里插入图片描述
我的这个开始链接出现问题是因为网线插错网口了,应该插到挨着db9的网口上。

终于搞完了,详细的解释后面补充

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

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

相关文章

Linux 目录结构与基础查看命令

介绍 目录结构如下 /bin&#xff1a;存放着用户最经常使用的二进制可执行命令&#xff0c;如cp、ls、cat等。这些命令是系统管理员和普通用户进行日常操作所必需的。 /boot&#xff1a;存放启动系统使用的一些核心文件&#xff0c;如引导加载器&#xff08;bootstrap loader…

采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示

采用C#.Net JavaScript 开发的云LIS系统源码 二级医院应用案例有演示 一、系统简介 云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序&#xff0c;可协助区域内所有临床实验室相互协调并完成日常检验工作&#xff0c;对区域内的检验数据进行集中管理和共享&#xff0…

4*5的矩阵(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 0;int j 0;int result 0;//嵌套循环输出&#xff1b;for (i 1; i < 4; i){//列…

L2正则化——解释为什么可以减少模型的复杂度

L2正则化是一种用于机器学习模型的技术&#xff0c;旨在减少模型的复杂度&#xff0c;从而提高其泛化能力。在L2正则化中&#xff0c;通过添加一个惩罚项&#xff0c;模型的权重被迫保持较小的值&#xff0c;这有助于防止过拟合&#xff0c;即模型在训练数据上表现良好但在未见…

【Python】OPC UA模拟服务器实现

目录 服务器模拟1. 环境准备2. 服务器设置3. 服务器初始化4. 节点操作5. 读取CSV文件6. 运行服务器 查看服务器客户端总结 在工业自动化和物联网&#xff08;IoT&#xff09;领域&#xff0c;OPC UA&#xff08;开放平台通信统一架构&#xff09;已经成为一种广泛采用的数据交换…

单链表的基本操作实现:初始化、尾插法、头插法、输出单链表、求表长、按序号查找、按值查找、插入结点、删除结点。

1.参考学习博文&#xff08;写的相当好的文章&#xff09;&#xff1a; http://t.csdnimg.cn/AipNl 2.关于我的总结&#xff1a; 定义单链表&#xff1a; typedef struct LNode {Elemtype data;struct LNode* next; }LNode; data用来存放元素值&#xff0c;next用来指向后…

【算法】反转链表

本题来源---《反转链表》 题目描述&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输…

医学图像三维重建与可视化系统 医学图像分割 区域增长

医学图像的三维重建与可视化&#xff0c;这是一个非常有趣且具有挑战性的课题&#xff01;在这样的项目中&#xff0c;可以探索不同的医学图像技术&#xff0c;比如MRI、CT扫描等&#xff0c;然后利用这些图像数据进行三维重建&#xff0c;并将其可视化以供医生或研究人员使用。…

C++中的继承与多态

一、继承&#xff1a; 1.什么是继承&#xff1f; 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象…

golang map总结

目录 概述 一、哈希表原理 哈希函数 哈希表和哈希函数的关系 哈希表的优势 哈希冲突 什么是哈希冲突 如何处理哈希冲突 链表法 开放寻址法 哈希表常见操作过程 存储数据 检索数据 删除数据 常用的哈希算法 哈希表的应用场景 二、golang map map的内部结构 h…

Docker Volume (存储卷)

什么是存储卷? 存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这就意味着&#xff0c;当我们在容器中的这个目录下写入数据时&#xff0c;容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。在宿主机上…

选课成绩管理系统

文章目录 员工管理系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目&#xff08;9.9&#xffe5;&#xff09; 员工管理系统 一、项目演示 课程管理系统 二、项目介绍 基于springbootvue的前后端分离选课成绩管理系统 该系统可做课程管理…

基础算法之二分算法

前言 本次博客&#xff0c;将要介绍二分算法的基本原理以及如何使用&#xff0c;深入浅出 二分可以针对整型以及浮点型接下来对其讲解希望对小白有所帮助吧 整型的二分法 一般要在一个数组中猜出一个数是否存在我们可以遍历一遍整个数组&#xff0c;判断是否存在&#xff0…

使用Windows11自带的WSL安装Ubuntu Linux系统教程

WSL介绍 WSL全称Windows Subsystem for Linux&#xff0c;它是Windows10带来的新特性&#xff0c;用于Windows系统上的Linux子系统。也就是说&#xff0c;可以在Windows系统中获取Linux系统&#xff0c;这个过程无需通过虚拟机&#xff0c;而是直连计算机硬件。 简而言之&#…

Linux--进程间的通信-命名管道

前文&#xff1a; Linux–进程间的通信-匿名管道 Linux–进程间的通信–进程池 命名管道的概念 命名管道是一种进程间通信&#xff08;IPC&#xff09;机制&#xff0c;运行不同进程之间进行可靠的、单向或双向的数据通信。 特点和作用&#xff1a; 跨平台性&#xff1a;在W…

ResNet最新变体!性能反超Transformer,模型准确率达98.42%

目前ResNet&#xff08;残差网络&#xff09;有两大主流创新思路&#xff1a;一是与其他技术或模型结合&#xff0c;比如前文讲到的ResNetTransformer&#xff1b;二是在原始设计的基础上进行改进。 尽管ResNet通过残差学习有效改善了深层网络的训练和性能&#xff0c;但同时它…

永磁同步电机无感FOC(扩展卡尔曼滤波EKF位置观测控制)

文章目录 1、前言2、扩展卡尔曼滤波器原理2.1 预测阶段&#xff08;时间更新阶段&#xff09;2.2 校正阶段&#xff08;状态更新阶段&#xff09; 3、永磁同步电机EKF的模型4、永磁同步电机EKF的无位置状态观测仿真4.1 核心模块&#xff08;在滑膜、龙伯格、磁链等观测器基础上…

三角洲期刊投稿发表论文

《三角洲》杂志是由国家新闻出版总署批准&#xff0c;南通市委宣传部主管&#xff0c;南通日报社、南通市文学艺术界联合会主办的正规文学类期刊。适用于发表高品质文学学术作品&#xff0c;科研机构的专家学者以及高等院校的师生等具有原创性的学术理论、工作实践、科研成果和…

openEuler-23.03下载

下载地址&#xff1a;openEuler下载 | 欧拉系统ISO镜像 | openEuler社区官网 下载版本&#xff1a;openEuler-23.03-x86_64-dvd.iso

H264标准协议基础3

参考博文 上一篇H264标准协议基础2 1.解码视频帧的poc计算 2.残差4x4 矩阵中的trailingones & numcoeff 2.1查表 trailingones 表达出尾部one(1,-1)系数的个数,按照zigzag扫描出(1,-1)个数,trailingones的最大为3; numcoeff 表达非零值系数的个数,最多为16个…