编译NXP官方Linux内核
每个板子都有默认配置文件,都保 存 在 arch/arm/configs
目录下
imx_v7_defconfig和imx_v7_mfg_defconfig 都可作为 I.MX6ULL EVK 开发板所使用的默认配置文件
但imx_v7_mfg_defconfig编译出来的zImage可以使用MfgTool工具烧录
配置编译: make_nxp_linux.sh
ares@ubuntu:~/work/linux-imx-rel_imx_4.1.15_2.1.0_ga_opto$ cat make_nxp_linux.sh
#!/bin/bash
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- -j8
编译会得到内核镜像和设备树:
/arch/arm/boot/zImage
ares@ubuntu:~/work/linux-imx-rel_imx_4.1.15_2.1.0_ga_opto$ find . -name "zImage"
./arch/arm/boot/zImage
/arch/arm/boot/dts/imx6ull-14x14-evk.dtb
ares@ubuntu:~/work/linux-imx-rel_imx_4.1.15_2.1.0_ga_opto$ find . -name "imx6ull-14x14-evk.dtb"
./arch/arm/boot/dts/imx6ull-14x14-evk.dtb
添加自己的单板
添加默认配置文件:
cd arch/arm/configs/
cp imx_v7_mfg_defconfig imx_opto_emmc_defconfig
添加自己的单板默认配置文件一般也是在原厂官方板子默认配置基础上添加
添加单板对应的设备树文件:
cd arch/arm/boot/dts
cp imx6ull-14x14-evk.dts imx6ull-opto-emmc.dts
修改arch/arm/boot/Makefile :
dtb-$(CONFIG_SOC_IMX6ULL) += \
imx6ull-14x14-ddr3-arm2.dtb \
imx6ull-14x14-ddr3-arm2-adc.dtb \
imx6ull-14x14-ddr3-arm2-cs42888.dtb \
imx6ull-14x14-ddr3-arm2-ecspi.dtb \
imx6ull-14x14-ddr3-arm2-emmc.dtb \
imx6ull-14x14-ddr3-arm2-epdc.dtb \
imx6ull-14x14-ddr3-arm2-flexcan2.dtb \
imx6ull-14x14-ddr3-arm2-gpmi-weim.dtb \
imx6ull-14x14-ddr3-arm2-lcdif.dtb \
imx6ull-14x14-ddr3-arm2-ldo.dtb \
imx6ull-14x14-ddr3-arm2-qspi.dtb \
imx6ull-14x14-ddr3-arm2-qspi-all.dtb \
imx6ull-14x14-ddr3-arm2-tsc.dtb \
imx6ull-14x14-ddr3-arm2-uart2.dtb \
imx6ull-14x14-ddr3-arm2-usb.dtb \
imx6ull-14x14-ddr3-arm2-wm8958.dtb \
imx6ull-14x14-evk.dtb \
imx6ull-14x14-evk-btwifi.dtb \
imx6ull-14x14-evk-emmc.dtb \
imx6ull-14x14-evk-gpmi-weim.dtb \
imx6ull-14x14-evk-usb-certi.dtb \
imx6ull-9x9-evk.dtb \
imx6ull-9x9-evk-btwifi.dtb \
imx6ull-9x9-evk-ldo.dtb \
imx6ull-opto-emmc.dtb
在CONFIG_SOC_IMX6ULL
选项下添加自己的设备树imx6ull-opto-emmc.dtb
(二进制设备文件)
编译: make_opto_linux.sh
ares@ubuntu:~/work/linux-imx-rel_imx_4.1.15_2.1.0_ga_opto$ cat make_opto_linux.sh
#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_opto_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
查看CPU频率信息:可以通过查看内核目录/sys/bus/cpu/devices/cpu0/cpufreq下的文件
root@imx6ul7d:~# ls /sys/bus/cpu/devices/cpu0/cpufreq/
affected_cpus cpuinfo_max_freq cpuinfo_transition_latency scaling_available_frequencies scaling_cur_freq scaling_governor scaling_min_freq stats
cpuinfo_cur_freq cpuinfo_min_freq related_cpus scaling_available_governors scaling_driver scaling_max_freq scaling_setspeed
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(调频)策略。
scaling_max_freq:governor(调频)可以调节的最高频率。
cpuinfo_min_freq:governor(调频)可以调节的最低频率。
Linux 内核一共有 5 种调频策略:
- Performance,最高性能,直接用最高频率,不考虑耗电
- Interactive,一开始直接用最高频率,然后根据 CPU 负载慢慢降低
- Powersave,省电模式,通常以最低频率运行,系统性能会受影响,一般不会用这个
- Userspace,可以在用户空间手动调节频率。
- Ondemand,定时检查负载,然后根据负载来调节频率。负载低的时候降低 CPU 频率,
这样省电,负载高的时候提高 CPU 频率,增加性能
查看CPU主频:
root@imx6ul7d:/sys/bus/cpu/devices/cpu0/cpufreq# cat cpuinfo_cur_freq
198000
CPU调频策略修改 :
make menuconfig
CPU Power Management --->
CPU Frequency scaling --->
Default CPUFreq governor (performance) --->
(X) performance
( ) powersave
( ) userspace
( ) ondemand
( ) conservative
( ) interactive