(Linux内核)3-内核移植

LINUX的内核移植主要是参考的官方的EVK开发板

编译官方linux

首先建立VSCODE工程,复制.vscode/settings.json到工程。

建立编译脚本imx6ull_14×14_evk.sh

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

编译 ./imx6ull_14×14_evk.sh,默认配置文件存放路径arch/arm/configs。

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

将zImage,和 imx6ull-14x14-evk-emmc.dtb拷贝到tftp目录下,然后再uboot中通过tftp启动,-f替换已有文件

cp arch/arm/boot/zImage /home/lyl/linux/tftpboot/ -f

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

启动Uboot,利用Uboot烧录linux:

tftp 80800000 zImage

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

bootz 80800000 - 83000000

最后Uboot报错:

因为没有根文件系统

 

添加自己的开发板

1.imx6_alientek_emmc_defconfig添加默认配置文件

复制arch/arm/configs/imx_v7_mfg_defconfig文件为imx_alientek_emmc_defconfig

cp imx_v7_mfg_defconfig imx6ull_alientek_emmc_defconfig

2.imx6ull-alientek-emmc.dts添加设备树文件

目录 arch/arm/boot/dts,cp imx6ull-14x14-evk.dts imx6ull-alientek-emmc.dts

3.修改arch/arm/boot/dts/Makefile,添加imx6ull-alientek-emmc.dtb
4.编写编译脚本imx6ull_alientek_emmc.sh

 cp imx6ull_14x14_evk.sh imx6ull_alientek_emmc.sh

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

如果不用编译脚本,可以在Makefile顶层写死ARCH与AROSS_COMPILE,直接使用make命令就可以编译了

ARCH		?= arm
CROSS_COMPILE	?= arm-linux-gnueabihf-

完成后可以将zImage与设备树dtb通过tftp启动,添加成功。

 

CPU主频和网络驱动修改

修改驱动之前,要先保证板子能够正常启动。可以设置bootcmd变量让uboot自动启动linux。

bootcmd和bootargs是两个比较重要的变量,bootcmd保存了uboot的默认启动命令,bootargs保存了uboot要传输给linux的变量值,主要包括控制台选择,根文件系统的信息。

所以在uboot里设置默认通过从网络启动,通过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’

接着修改imx6ull-alientek-emmc.dts中找到usdhc2节点,该节点描述着EMMC设备信息。

&usdhc2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usdhc2>;
	non-removable;
	status = "okay";
};

编译dtb:make dtbs,接下来就可以启动成功。

 

主频修改:

linux可以运行在多个主频下,cd /sys/bus/cpu/devices/cpu0/cpufreq 记录了linuxCPU的各项信息,

cpuinfo_cur_freq:当前 cpu 工作频率,从 CPU 寄存器读取到的工作频率。
cpuinfo_max_freq:处理器所能运行的最高工作频率(单位: KHz)。
cpuinfo_min_freq :处理器所能运行的最低工作频率(单位: KHz)。
cpuinfo_transition_latency:处理器切换频率所需要的时间(单位:ns)。
scaling_available_frequencies:处理器支持的主频率列表(单位: KHz)。
scaling_available_governors:当前内核中支持的所有 governor(调频)类型。

scaling_cur_freq:保存着 cpufreq 模块缓存的当前 CPU 频率,不会对 CPU 硬件寄存器进行检查。
scaling_driver: 该文件保存当前 CPU 所使用的调频驱动。
scaling_governor: governor(调频)策略, Linux 内核一共有 5 中调频策略,
①、 Performance,最高性能,直接用最高频率,不考虑耗电。
②、 Interactive,一开始直接用最高频率,然后根据 CPU 负载慢慢降低。
③、 Powersave,省电模式,通常以最低频率运行,系统性能会受影响,一般不会用这个!
④、 Userspace,可以在用户空间手动调节频率。
⑤、 Ondemand,定时检查负载,然后根据负载来调节频率。负载低的时候降低 CPU 频率,这样省电,负载高的时候提高 CPU 频率,增加性能。
scaling_max_freq: governor(调频)可以调节的最高频率。
cpuinfo_min_freq: governor(调频)可以调节的最低频率。
通过cat命令可以对每个文件进行查看。

主频可以使用linux内核图形化界面修改:make menuconfig

路径CPU Power Management
            -> CPU Frequency scaling
                -> Default CPUFreq governor。

 

始能EMMC8线

修改网络驱动

1.修改复位引脚

2.修改PHY地址

单独编译设备树文件:make dtbs

3.修改 fec_main.c 文件

4.配置 Linux 内核,使能 LAN8720 驱动

5.修改 smsc.c 文件

你可能感兴趣的:(嵌入式)