使用的开发板是正点原子IMX6U-MINI  EMMC512M的开发板,这个板子也是移植的NXP官方linux,所以这里就直接从NXP官方的linux移植。

      这里所说的移植,其实不是自己编写驱动文件等,只是简单的将官方linux中的相关配置文件和文件名修改为自己的名字而已。

目录

拷贝官方原文件

重命名文件夹

修改Makefile

编译源码

内核启动测试

修改配置文件

修改设备树文件

修改Makefile 文件

新建编译脚本文件

修改CPU工作频率

使能8线EMMC驱动


拷贝官方原文件

使用ftp工具将NXP官方的linux文件发送到Ubuntu系统中。

linux如何移植systemd linux移植步骤_步骤

下来在Ubuntu系统中解压linux压缩包

tar -vxif linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2

linux如何移植systemd linux移植步骤_步骤_02

重命名文件夹

解压完成后重命名文件夹

mv linux-imx-rel_imx_4.1.15_2.1.0_ga      my_linux

将默认文件夹名重命名为my_linux

linux如何移植systemd linux移植步骤_移植_03

修改Makefile

进入到my_linux文件夹中,修改顶层Makefile文件

linux如何移植systemd linux移植步骤_移植_04

在Makefile文件中将ARCH 和 CROSS_COMPILE 这两个变量的值直接写死

linux如何移植systemd linux移植步骤_移植_05

保存退出。

编译源码

在编译之前,首先清理一下工程。

使用 make clean 命令清理工程

linux如何移植systemd linux移植步骤_linux如何移植systemd_06

接下来开始编译默认配置文件imx_v7_mfg_defconfig

使用命令 make imx_v7_mfg_defconfig

linux如何移植systemd linux移植步骤_linux如何移植systemd_07

接下来直接编译linux内核

使用make -j4命令编译linux内核

linux如何移植systemd linux移植步骤_官方_08

这个编译的时间会比较长。编译完成后如图所示:

linux如何移植systemd linux移植步骤_移植_09

Linux 内核编译完成以后会在 arch/arm/boot 目录下生成 zImage 镜像文件,如果使用设备树的话还会在 arch/arm/boot/dts 目录下开发板对应的.dtb(设备树)文件,比如 imx6ull-14x14-evk.dtb。

linux如何移植systemd linux移植步骤_Linux_10

内核启动测试

在内核启动先首先要设置好uboot中的环境变量bootargs 内容如下:

linux如何移植systemd linux移植步骤_移植_11

如果没有设置则设置 bootargs,设置方法如下:

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

接下来将生成的zImage文件和imx6ull-14x14-evk.dtb文件拷贝到 Ubuntu系统中的tftp目录中。

linux如何移植systemd linux移植步骤_步骤_12

linux如何移植systemd linux移植步骤_步骤_13

接下来启动开发板,进入uboot命令模式中。使用ftp命令从Ubuntu系统中下载镜像文件和设备树文件。

tftp 80800000 zImage

tftp 83000000 imx6ull-14x14-evk.dtb

bootz 80800000 - 83000000

linux如何移植systemd linux移植步骤_官方_14

这是内核就开始启动

linux如何移植systemd linux移植步骤_步骤_15

启动成功就就可以查看文件了

linux如何移植systemd linux移植步骤_linux如何移植systemd_16

Linux内核正常启动后,就可以将NXP官方的配置文件修改为自己的。

修改配置文件

进入到my_linux/arch/arm/configs 文件夹中

linux如何移植systemd linux移植步骤_官方_17

将imx_v7_mfg_defconfig 复制一份重命名为 imx_myliux_emmc_defconfig

linux如何移植systemd linux移植步骤_linux如何移植systemd_18

修改设备树文件

进入到/my_linux/arch/arm/boot/dts文件夹中

linux如何移植systemd linux移植步骤_Linux_19

复制一份 imx6ull-14x14-evk.dts,然后将其重命名为 imx6ull-mylinux-emmc.dts

linux如何移植systemd linux移植步骤_linux如何移植systemd_20

linux如何移植systemd linux移植步骤_官方_21

修改Makefile 文件

接下来继续在my_linux/arch/arm/boot/dts文件夹中修改Makefile文件。

linux如何移植systemd linux移植步骤_官方_22

linux如何移植systemd linux移植步骤_移植_23

找到“ dtb-$(CONFIG_SOC_IMX6ULL)”配置项,在此配置项中加入“imx6ull-mylinux-emmc.dtb”

新建编译脚本文件

在my_linux文件夹中新建imx6ull_mylinux_emmc.sh文件

linux如何移植systemd linux移植步骤_移植_24

在文件中输入编译脚本

#!/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

linux如何移植systemd linux移植步骤_步骤_25

接下来给脚本设置可执行权限

输入命令: chmod 777 imx6ull_mylinux_emmc.sh

linux如何移植systemd linux移植步骤_linux如何移植systemd_26

接下来就可以使用脚本编译内核了

linux如何移植systemd linux移植步骤_移植_27

编译完成结果如下

linux如何移植systemd linux移植步骤_linux如何移植systemd_28

编译完成以后就会在目录 arch/arm/boot 下生成 zImage 镜像文件。在 arch/arm/boot/dts 目录下生成 imx6ull-mylinux-emmc.dtb 文件。将这两个文件拷贝到 tftp 目录下。

linux如何移植systemd linux移植步骤_移植_29

linux如何移植systemd linux移植步骤_Linux_30

然后重启开发板,在uboot 命令模式中使用 tftp 命令下载这两个文件并启动,命令如下:

tftp 80800000 zImage

tftp 83000000 imx6ull-mylinux-emmc.dtb

bootz 80800000 – 83000000

linux如何移植systemd linux移植步骤_移植_31

启动成功后如图

linux如何移植systemd linux移植步骤_移植_32

修改CPU工作频率

在串口终端中 进入/sys/bus/cpu/devices/cpu0/cpufreq/文件夹

使用cat cpuinfo_cur_freq命令查看当前CPU工作频率

linux如何移植systemd linux移植步骤_linux如何移植systemd_33

可以看到CPU当前工作频率为792000

如果要修改CPU工作频率的话,可以修改imx_mylinux_emmc_defconfig配置文件

在Ubuntu系统中 进入/my_linux/arch/arm/configs 文件夹

打开imx_mylinux_emmc_defconfig配置文件

linux如何移植systemd linux移植步骤_Linux_34

设置CONFIG_CPU_FREQ_GOV_ONDEMAND=y 选项

linux如何移植systemd linux移植步骤_Linux_35

Linux 内核一共有 5 种调频策略,

①、Performance,最高性能,直接用最高频率,不考虑耗电。

②、Interactive,一开始直接用最高频率,然后根据 CPU 负载慢慢降低。

③、Powersave,省电模式,通常以最低频率运行,系统性能会受影响,一般不会用这个!

④、Userspace,可以在用户空间手动调节频率。

⑤、Ondemand,定时检查负载,然后根据负载来调节频率。负载低的时候降低 CPU 频率,这样省电。负载高的时候提高 CPU 频率,增加性能。

 

修改完成以后重新编译 Linux 内核,编译之前先清理一下工程!因为我们重新修改过默认

配置文件了,编译完成以后使用新的 zImage 镜像文件重新启动 Linux。再次查看

/sys/devices/system/cpu/cpu0/cpufreq/ cpuinfo_cur_freq 文件的值

linux如何移植systemd linux移植步骤_步骤_36

输入 cat scaling_governor 查看当前的调频策略。

看出当前的 CPU 调频策略为 preformance,也就是高性能模式,一直以最高主频运行。

也可以通过图形化配置界面来设置CPU的调频策略
在Ubuntu系统中进入my_linux文件夹中

输入make menuconfig

linux如何移植systemd linux移植步骤_官方_37

选择CPU Power Management

linux如何移植systemd linux移植步骤_移植_38

进入CPU Frequency scaling中

linux如何移植systemd linux移植步骤_Linux_39

进入Default CPUFreq governor

linux如何移植systemd linux移植步骤_linux如何移植systemd_40

选择 performance

linux如何移植systemd linux移植步骤_Linux_41

然后保存退出。

然后编译 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文件

linux如何移植systemd linux移植步骤_Linux_42

找到734行&usdhc2节点

linux如何移植systemd linux移植步骤_步骤_43

将内容修改为如下:

&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";
};

linux如何移植systemd linux移植步骤_移植_44

接下来就要开始修改网络驱动了。