自学内容网 自学内容网

Linux——linux系统移植

创建VSCode工程

1、将NXP官方的linux内核拷贝到Ubuntu

2、解压缩tar -vxjf linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2

NXP官方开发板Linux内核编译

1、将.vscode文件夹复制到NXP官网linux工程中,屏蔽一些不需要的文件

2、编译NXP官方EVK开发板对应的Linux系统,默认配置文件存放路径arch/arm/configs

编写shell脚本

#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_mfg_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j12

使用命令给予可执行权限

chmod +x imx6ull_14x14_evk.sh

执行编译

如果出现下面的错误

scripts/dtc/dtc-parser.tab.o:(.bss+0x50): multiple definition of `yylloc'; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status

原因是gcc版本过高导致,解决方法如下:

修改scripts/dtc目录下的dtc-lexer.lex.c_shipped文件中找到
YYLTYPE yyloc这一行,在640行,在之前面加上extern 
保存退出,
make 编译 

最终编译出zImage和imx6ull-14x14-evk-emmc.dtb,imx6ull-14x14-evk.dtb

将zImage和imx6ull-14x14-evk-emmc.dtb拷贝到tftpboot目录下

cp arch/arm/boot/zImage /home/zzs/linux/tftpboot/ -f
cp arch/arm/boot/dts/imx6ull-14x14-evk-emmc.dtb /home/zzs/linux/tftpboot/ -f

在Uboot命令行中通过tftp将zImage和imx6ull-14x14-evk-emmc.dtb拷贝到DRAM中

tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-evk-emmc.dtb

在linux中添加自己的开发板

添加imx6ull_alientek_emmc_defconfig默认配置文件

复制NXP官方的arch/arm/configs/defconfig文件,修改成我们自己的默认配置文件名

cp imx_v7_mfg_defconfig imx_alientek_emmc_defconfig

添加imx6ull-alientek_emmc.dts编译出来就是dtb文件

添加imx6ull-alientek_emmc.dts编译出来就是dtb文件

修改arch/arm/boot/dts/Makefile

将编译生成的zImage文件和dtb文件复制到tftpboot中,如何通过uboot命令行加载到DRAM中,启动内核

CPU主频和网络驱动修改

利用bootcmd环境变量设置默认从网络启动,通过tftp

setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000;'

bootargs设置,根文件系统存放在emmc的分区2中,命令如下:

setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'

现在的问题就是EMMC驱动有问题,在imx6ull_alientek_emmc.dts下找到&usdhc2节点,进行如下修改

&usdhc2 {
pinctrl-names = "default", "state_100mhz", "state_200mhz";
pinctrl-0 = <&pinctrl_usdhc2_8bit>;
pinctrl-1 = <&pinctrl_usdhc2_8bit_100mhz>;
pinctrl-2 = <&pinctrl_usdhc2_8bit_200mhz>;
bus-width = <8>;
non-removable;
status = "okay";
};

修改完编译设备树,使用如下命令:

make dtbs

查看CPU信息

cat /proc/cpuinfo

处理器性能越强,主频越高,BogoMIPS值就越大

修改主频

cd /sys/bus/cpu/devices/cpu0/cpufreq

例如:输入命令查看当前cpu主频

cat cpuinfo_cur_freq

make menuconfig打开图形化配置界面,进入CPU Power Managment

进入路径:

​    CPU Power Management                                                                                     

​         -> CPU Frequency scaling                                                                           

​             -> Default CPUFreq governor 

修改策略为**ondemand**

重新编译make,加载到DRAM

使能8线EMMC

修改设备树,imx6ull_alientek_emmc.dts 节点 usdhc2

并加入 no-1-8-v;

网络驱动修改

修改复位引脚

ENET1复位引脚ENET1_RST连接在I.M6ULL的SNVS_TAMPER7这个引脚上。ENET2的复位引脚ENET2_RST连接在I.MX6ULL的SNVS_TAMPER8上

打开设备树文件imx6ull-alientek-emmc.dts,删掉588、599行

打开设备树文件imx6ull-alientek-emmc.dts,删掉588、599行

删掉

添加

修改ENET1和ENET2的网络时钟引脚配置

修改fec1和fec2节点的pinctrl-0属性和SR8201F的PHY地址

修改fec_main.c文件

找到drivers/net/ethernet/freescale/fec_main.c的fec_reset_phy函数,在函数最后加一行200ms的延时


原文地址:https://blog.csdn.net/weixin_74209413/article/details/144378915

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!