1、修改“linux-5.4.31”目录下的“Makefile”
1)、使用VSCode打开“linux-5.4.31.code-workspace”
2)、点击“linux-5.4.31”目录下的“Makefile”
3)、点击“编辑”,点击“查找”,输入“CROSS_COMPILE回车”,找到“ARCH ?= $(SUBARCH)”
4)、添加内容如下:
ARCH = arm
CROSS_COMPILE = arm-none-linux-gnueabihf-
见下图:
5)、点击“文件”,点击“保存”;
2、创建脚本文件,命名为“stm32mpl57d_atk.sh”
1)、输入“ls回车”
输入“cd linux/回车”,切换到“linux”目录
输入“ls回车”,列出“linux”目录下的文件和文件夹
输入“cd atk-mp1/回车”,切换到“atk-mp1”目录
输入“ls回车”,列出“atk-mp1”目录下的文件和文件夹
输入“cd linux/回车”,切换到“linux”目录
输入“ls回车”,列出“linux”目录下的文件和文件夹
输入“cd my_linux/回车”,切换到“my_linux”目录
输入“ls回车”,列出“my_linux”目录下的文件和文件夹
输入“cd linux-5.4.31/回车”,切换到“linux-5.4.31”目录
输入“ls回车”,列出“linux-5.4.31”目录下的文件和文件夹
2)、输入“vi stm32mp157d_atk.sh回车”
3)、输入内容如下:
#!/bin/sh
make distclean
#清除工程,删除“.config”文件,执行1次即可,以后就不要再执行了。
make stm32mp1_atk_defconfig
#设置为默认配置,执行1次即可,以后就不需要执行该语句了。
#“stm32mp1_atk_defconfig”位于“arch/arm/configs”目录下;
make menuconfig
#打开图形化配置界面
make uImage dtbs LOADADDR=0XC2000040 -j8
#编译镜像文件和设备树,linux内核在DDR中的加载地址为0XC2000040,-j8表示采用8线程编译
见下图:
4)、按“ESC键”,按“:wq回车”保存脚本文件
输入“ls回车”,列出“linux-5.4.31”目录下的文件和文件夹
5)、输入“chmod 777 stm32mp157d_atk.sh回车”,给脚本文件赋予可执行权限
输入“ls回车”,列出“linux-5.4.31”目录下的文件和文件夹
3、使用脚本文件“stm32mpl57d_atk.sh”编译linux源码;
1)、输入“./stm32mp157d_atk.sh回车”,执行编译;
2)、输入“cd arch/arm/boot/回车”,切换到“arch/arm/boot/”目录
输入“ls回车”,列出“boot”目录下的文件和文件夹
发现生成了uImage文件
3)、输入“cd dts/回车”,切换到“dts”目录
输入“ls stm32mp*回车”,列出“dts”目录下以“stm32mp”为开头的的文件和文件夹
发现linux设备树文件“stm32mp157d-ed1.dtb”
见下图:
4、修改网络驱动
STM32MP157核心板V1.3的网络驱动芯片型号:YT8511,其PHY地址为0x00;
STM32MP157核心板V1.2的网络驱动芯片型号:RTL8211,其PHY地址为0x01;
网络驱动程序名字:phy.c;
网络驱动程序功能:支持YT8511和RTL8211;
正点原子的网络驱动程序路径:
“程序源码\08、模块驱动源码\01、YT8511驱动源码\linux内核下修改方法\linux”
1)、使用“FileZilla”,将“motorcomm_phy.h”分别拷贝到“/home/zgq/linux/atk-mp1/linux/my_linux/linux-5.4.31/include/linux”目录下
2)、使用“FileZilla”,将“motorcomm.c”拷贝到 Limux 源码下的 “/home/zgq/linux/atk-mp1/linux/my_linux/linux-5.4.31/drivers/net/phy” 目录下
3)、修改“my_linux/linux-5.4.31/drivers/net/phy/”目录下的Makefile文件
使用VSCode打开“linux-5.4.31.code-workspace”,然后点击“drivers”,点击“net”,点击“phy”,找到“Makefile”,打开它,见下图:
4)、在最后一行添加“obj-$(CONFIG_MOTORCOMM_PHY) += motorcomm.o”
见下图:
5)、修改“my_linux/linux-5.4.31/drivers/net/phy/”目录下的Kconfig文件,加入如下内容:
config MOTORCOMM_PHY
tristate "Motorcomm PHYs"
---help---
Supports the YT8010, YT8510, YT8511, YT8512 PHYs.
见下图:
6)、输入“cd ..回车”,退回到“boot”目录
输入“cd ..回车”,退回到“arm”目录
输入“cd ..回车”,退回到“arch”目录
输入“cd ..回车”,退回到“linux-5.4.31”目录
输入“make menuconfig回车”,打开linux内核配置界面
移动向下光标键,找到“Device Drivers”
7)、按“回车”进入,移动向下光标键,找到“Network device support”
8)、按“回车”进入,移动向下光标键,找到“PHY Device support and infrastructure”
9)、按“回车”进入,移动向下光标键,找到“Motorcomm PHYs”
10)、按“y”,将YT8511驱动编译进内核
11)、按“ESC”退出,直到出现下图:
12)、按“Y”,保存
输入“make uImage dtbs LOADADDR=0XC2000040 -j8回车”
编译镜像文件和设备树,linux内核在DDR中的加载地址为0XC2000040,-j8表示采用8线程编译
注意:不能使用脚本文件编译,否则会把刚才的配置清除了。
13)、为了防止配置文件丢失,将linux默认配置文件“.config”修改为“./arch/arm/configs/stm32mp1_atk_defconfig”,
注意:make distclean #清除工程,删除“.config”文件,测试OK后,一定要保存。
输入“make menuconfig回车”
14)、移动向右光标键至“Save”,按下“回车”
15)、输入“./arch/arm/configs/stm32mp1_atk_defconfig”
16)、向下移动光标至“Ok”,再按“O”保存
输入“vi ./arch/arm/configs/stm32mp1_atk_defconfig回车”
17)、按“ESC键”,输入“/CONFIG_MOTORCOMM_PHY回车”,搜索“CONFIG_MOTORCOMM_PHY”
发现“CONFIG_MOTORCOMM_PHY”,说明备份正确。
18)、按“ESC键”,输入“:q!回车”,不保存退出。
至此,我们得到了ST公司开发板对应的ulmage和stm32mp157d-ed1.dtb设备树,还需要修改linux设备树,暂时还不能烧录。