使用的开发板是正点原子IMX6U-MINI EMMC512M的开发板,这个板子也是移植的NXP官方linux,所以这里就直接从NXP官方的linux移植。
这里所说的移植,其实不是自己编写驱动文件等,只是简单的将官方linux中的相关配置文件和文件名修改为自己的名字而已。
目录
拷贝官方原文件
重命名文件夹
修改Makefile
编译源码
内核启动测试
修改配置文件
修改设备树文件
修改Makefile 文件
新建编译脚本文件
修改CPU工作频率
使能8线EMMC驱动
拷贝官方原文件
使用ftp工具将NXP官方的linux文件发送到Ubuntu系统中。
下来在Ubuntu系统中解压linux压缩包
tar -vxif linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
重命名文件夹
解压完成后重命名文件夹
mv linux-imx-rel_imx_4.1.15_2.1.0_ga my_linux
将默认文件夹名重命名为my_linux
修改Makefile
进入到my_linux文件夹中,修改顶层Makefile文件
在Makefile文件中将ARCH 和 CROSS_COMPILE 这两个变量的值直接写死
保存退出。
编译源码
在编译之前,首先清理一下工程。
使用 make clean 命令清理工程
接下来开始编译默认配置文件imx_v7_mfg_defconfig
使用命令 make imx_v7_mfg_defconfig
接下来直接编译linux内核
使用make -j4命令编译linux内核
这个编译的时间会比较长。编译完成后如图所示:
Linux 内核编译完成以后会在 arch/arm/boot 目录下生成 zImage 镜像文件,如果使用设备树的话还会在 arch/arm/boot/dts 目录下开发板对应的.dtb(设备树)文件,比如 imx6ull-14x14-evk.dtb。
内核启动测试
在内核启动先首先要设置好uboot中的环境变量bootargs 内容如下:
如果没有设置则设置 bootargs,设置方法如下:
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
接下来将生成的zImage文件和imx6ull-14x14-evk.dtb文件拷贝到 Ubuntu系统中的tftp目录中。
接下来启动开发板,进入uboot命令模式中。使用ftp命令从Ubuntu系统中下载镜像文件和设备树文件。
tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-evk.dtb
bootz 80800000 - 83000000
这是内核就开始启动
启动成功就就可以查看文件了
Linux内核正常启动后,就可以将NXP官方的配置文件修改为自己的。
修改配置文件
进入到my_linux/arch/arm/configs 文件夹中
将imx_v7_mfg_defconfig 复制一份重命名为 imx_myliux_emmc_defconfig
修改设备树文件
进入到/my_linux/arch/arm/boot/dts文件夹中
复制一份 imx6ull-14x14-evk.dts,然后将其重命名为 imx6ull-mylinux-emmc.dts
修改Makefile 文件
接下来继续在my_linux/arch/arm/boot/dts文件夹中修改Makefile文件。
找到“ dtb-$(CONFIG_SOC_IMX6ULL)”配置项,在此配置项中加入“imx6ull-mylinux-emmc.dtb”
新建编译脚本文件
在my_linux文件夹中新建imx6ull_mylinux_emmc.sh文件
在文件中输入编译脚本
#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_mylinux_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j4
接下来给脚本设置可执行权限
输入命令: chmod 777 imx6ull_mylinux_emmc.sh
接下来就可以使用脚本编译内核了
编译完成结果如下
编译完成以后就会在目录 arch/arm/boot 下生成 zImage 镜像文件。在 arch/arm/boot/dts 目录下生成 imx6ull-mylinux-emmc.dtb 文件。将这两个文件拷贝到 tftp 目录下。
然后重启开发板,在uboot 命令模式中使用 tftp 命令下载这两个文件并启动,命令如下:
tftp 80800000 zImage
tftp 83000000 imx6ull-mylinux-emmc.dtb
bootz 80800000 – 83000000
启动成功后如图
修改CPU工作频率
在串口终端中 进入/sys/bus/cpu/devices/cpu0/cpufreq/文件夹
使用cat cpuinfo_cur_freq命令查看当前CPU工作频率
可以看到CPU当前工作频率为792000
如果要修改CPU工作频率的话,可以修改imx_mylinux_emmc_defconfig配置文件
在Ubuntu系统中 进入/my_linux/arch/arm/configs 文件夹
打开imx_mylinux_emmc_defconfig配置文件
设置CONFIG_CPU_FREQ_GOV_ONDEMAND=y 选项
Linux 内核一共有 5 种调频策略,
①、Performance,最高性能,直接用最高频率,不考虑耗电。
②、Interactive,一开始直接用最高频率,然后根据 CPU 负载慢慢降低。
③、Powersave,省电模式,通常以最低频率运行,系统性能会受影响,一般不会用这个!
④、Userspace,可以在用户空间手动调节频率。
⑤、Ondemand,定时检查负载,然后根据负载来调节频率。负载低的时候降低 CPU 频率,这样省电。负载高的时候提高 CPU 频率,增加性能。
修改完成以后重新编译 Linux 内核,编译之前先清理一下工程!因为我们重新修改过默认
配置文件了,编译完成以后使用新的 zImage 镜像文件重新启动 Linux。再次查看
/sys/devices/system/cpu/cpu0/cpufreq/ cpuinfo_cur_freq 文件的值
输入 cat scaling_governor 查看当前的调频策略。
看出当前的 CPU 调频策略为 preformance,也就是高性能模式,一直以最高主频运行。
也可以通过图形化配置界面来设置CPU的调频策略
在Ubuntu系统中进入my_linux文件夹中
输入make menuconfig
选择CPU Power Management
进入CPU Frequency scaling中
进入Default CPUFreq governor
选择 performance
然后保存退出。
然后编译 Linux内核,一定不要清理工程!否则的话我们刚刚的设置就会被清理掉。编译完成以后使用新的zImage 重启 Linux,查看当前 CPU 的工作频率和调频策略。
使能8线EMMC驱动
正点原子 EMMC 版本核心板上的 EMMC 采用的 8 位数据线,Linux 内核驱动里面 EMMC 默认是 4 线模式的,4 线模式肯定没有 8 线模式的速度快,现在讲将 EMMC 的驱动修改为 8 线模式。
在Ubuntu系统中进入到my_linux/arch/arm/boot/dts文件中。打开imx6ull-mylinux-emmc.dts文件
找到734行&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";
};
接下来就要开始修改网络驱动了。