开发板:IMX6ULL ALPHA V2.2
NXP-uboot:2022.04
NXP-linux:6.6
gcc交叉编译器:7.5.0
根目录下增加.vscode目录及settings.json文件
{
"search.exclude": {
"**/node_modules": true,
"**/bower_components": true,
"** /*.o": true,
"**/*.su": true,
"** /*.cmd": true,
"**Documentation": true,
/* 屏蔽不用的架构相关的文件 */
"arch/alpha": true,
"arch/arc": true,
"arch/arm64": true,
"arch/avr32": true,
"arch/[b-z]*": true,
"arch/arm/plat*": true,
"arch/arm/mach-[a-h]*": true,
"arch/arm/mach-[n-z]*": true,
"arch/arm/mach-i[n-z]*": true,
"arch/arm/mach-m[e-v]*": true,
"arch/arm/mach-k*": true,
"arch/arm/mach-l*": true,
/* 屏蔽排除不用的配置文件 */
"arch/arm/configs/[a-h, j-z]*": true,
"arch/arm/configs/imxr*": true,
"arch/arm/configs/i[n,x]*": true,
/* 屏蔽掉不用的 DTB 文件 */
"arch/arm/boot/dts/[a-m, o-z]*": true,
"arch/arm/boot/dts/nxp/imx/imx[0-5,7,9]*": true,
"arch/arm/boot/dts/nxp/imx/imx6[a-k, m-t, v-z]*": true,
},
"files.exclude": {
"**/.git": true,
"**/.svn": true,
"**/.hg": true,
"**/CVS": true,
"**/.DS_Store": true,
"**/*.o": true,
"**/*.su": true,
"**/*.cmd": true,
"**/*.tmp": true,
"Documentation": true,
/* 屏蔽不用的架构相关的文件 */
"arch/alpha": true,
"arch/arc": true,
"arch/arm64": true,
"arch/avr32": true,
"arch/[b-z]*": true,
"arch/arm/plat*": true,
"arch/arm/mach-[a-h]*": true,
"arch/arm/mach-[n-z]*": true,
"arch/arm/mach-i[n-z]*": true,
"arch/arm/mach-m[e-v]*": true,
"arch/arm/mach-k*": true,
"arch/arm/mach-l*": true,
/* 屏蔽排除不用的配置文件 */
"arch/arm/configs/[a-h, j-z]*": true,
"arch/arm/configs/imxr*": true,
"arch/arm/configs/i[n,x]*": true,
/* 屏蔽掉不用的 DTB 文件 */
"arch/arm/boot/dts/[a-m, o-z]*": true,
"arch/arm/boot/dts/nxp/imx/imx[0-5,7,9]*": true,
"arch/arm/boot/dts/nxp/imx/imx6[a-k, m-t, v-z]*": true,
},
"files.associations": {
"of_gpio.h": "c",
"smscphy.h": "c",
"memory": "c",
"random": "c",
"array": "c",
"*.tcc": "c",
"istream": "c",
"functional": "c",
"tuple": "c",
"utility": "c",
"etherdevice.h": "c",
"io.h": "c"
}
}
“search.exclude”是屏蔽不需要搜索的文件,加快搜索速度,
“files.exclude”是在屏蔽不需要再左侧文件栏显示的文件。
由笔者根据正点原子教程及新版NXP-Linux源码改写而来。
修改顶层Makefile文件
ARCH ?= ARM
# 最后无空格
CROSS_COMPILE ?= arm-linux-gnueabihf-
编译NXP官方Linux镜像
配置文件的位置在 arch/arm/configs/imx_v7_defconfig
生成 .config文件
make imx_v7_defconfig
编译
make -j12
设置uboot参数
设置参数bootcmd
setenv bootcmd mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 my_mx6ull.dtb; bootz 80800000 - 83000000;
bootcmd是默认启动时使用的命令,上述设置的是emmc启动,若想默认从网络启动,更改该参数即可,更改如下:
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 my_mx6ull.dtb; bootz 80800000 - 83000000'
设置参数bootargs
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
自定义网络启动参数
setenv boottftp 'tftp 80800000 zImage; tftp 83000000 my_mx6ull.dtb; bootz 80800000 - 83000000'
保存设置
saveenv
拷贝及网络启动测试
请先搭建tftp服务器!此处不做展开,可以参考正点原子IMX6ULL手册V1.81 716页
拷贝设备树文件.dtb及linux镜像到tftp文件夹
请自行决定是否要更改文件名称,此处更改了设备树文件名,与上述uboot自定义网络启动参数对应即可。
拷贝设备树
cp arch/arm/boot/dts/nxp/imx/imx6ull-14x14-evk-emmc.dtb /home/oyry/linux/tftpboot/my_mx6ull.dtb
拷贝linux镜像
cp arch/arm/boot/zImage /home/oyry/linux/tftpboot/
网络启动
在uboot页面执行:
run boottftp
启动成功
修改设备树
我的做法是直接修改官方的设备树文件,不再备份。参考正点原子
设备树的目录为:arch/arm/boot/dts/nxp/imx/
打开 imx6ull-14x14-evk-emmc.dts
修改
网络和LCD修改
网络修改
设备树的修改可以参考uboot,顶层配置文件可以不增加CONFIG_PHY_SMSC=y,驱动不需要修改,除此之外,还需要修改
https://blog.csdn.net/qq_58967337/article/details/146118337
需要在imx6ul-14x14-evk.dtsi中包含头文件
#include “imx6ull-pinfunc-snvs.h”
需要将compatible = “ethernet-phy-id0022.1560”;屏蔽,否则会偶尔出现网络link is down的问题
LCD修改
LCD的修改可以参照uboot
https://blog.csdn.net/qq_58967337/article/details/146118337
编译与网络启动
编译Linux镜像和设备树
make -j12
只编译设备树
make dtbs
将编译好的Linux镜像和设备树复制到tftp目录下,使用网络启动
run boottftp
启动后可以使用 ifconfig -a 查看网卡信息
修改ip,eth0为网卡
ifconfig eth0 xxx.xxx.xxx.xxx
修改子网掩码
ifconfig eth0 netmask 255.255.255.0
此时还有一个问题,就是每次重启ip都有一个默认值,如果想使用自定义ip,每次进来都要修改,这就要先移植根文件系统了,有了根文件系统就能够设置开机自动配置了。
持续更新中。。。。