一、Linux核心編譯
1、修改頂層Makefile
第252行修改:
ARCH ?=arm
CROSS_COMPLIE?= arm-linux-gnueabihf-
2、配置并編譯Linux核心
make clean
make imx_v7_mfg_defconfig
3、Linux核心啟動測試
1、確定以下變量配置
console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw
2、将zImage和裝置樹檔案拷貝到tftp伺服器目錄下
3、下載下傳核心與裝置樹檔案到開發闆中,并啟動核心
tftp 80800000zImage
tftp83000000 imx6ull-14x14-evk.dtb
bootz80800000 – 83000000
4、前面環境變量root指定的是根檔案系統
二、添加自己的開發闆
1、添加開發闆預設配置檔案
cd arch/arm/configs
cp imx_v7_mfg_defconfig imx_alientek_emmc_defconfig
然後就可以直接使用 make imx_alientek_emmc_defconfig來編譯核心
2、添加開發闆對應的裝置樹檔案
cd arch/arm/boot/dts
cp imx6ull-14x14-evk.dts imx6ull-alientek-emmc.dts
然後需要在arch/arm/boot/dts/Makefile中找到dtb-$(CONFIG_SOC_IMX6ULL),并在此配置中添加imx6ull-alientek-emmc.dtb
3、編譯測試
編寫imx6ull_alientek_emmc.sh腳本
#!/bin/sh
#清理
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-distclean
#使用預設配置imx_alientek_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-imx_alientek_emmc_defconfig
#打開圖形配置界面
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-menuconfig
#編譯Linux
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16
三、CPU主頻和網絡驅動修改
1、CPU主頻修改
cat /proc/cpuinfo #檢視CPU資訊
其中BogoMIPS數值用來衡量處理器運作速度。
目錄/sys/bus/cpu/devices/cpu0/cpufreq下的部分檔案記錄了CPU頻率資訊:
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(調頻)可以調節的最低頻率。
stats 目錄下給出了 CPU 各種運作頻率的統計情況,比如 CPU 在各頻率下的運作時間以及變頻次數。
cat /sys/bus/cpu/devices/cpu0/cpufreq/stats/time_in_state #檢視CPU在各頻率下工作時間
預設配置檔案imx_alientek_emmc_defconfig中:
41 CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y #配置預設調頻政策為ONDEMAND42 CONFIG_CPU_FREQ_GOV_POWERSAVE=y43 CONFIG_CPU_FREQ_GOV_USERSPACE=y44 CONFIG_CPU_FREQ_GOV_INTERACTIVE=y
屏蔽41行,并添加 CONFIG_CPU_FREQ_GOV_ONDEMAND=y
在目錄/sys/devices/system/cpu/cpu0/cpufreq/下檢視檔案cpuinfo_cur_freq、scaling_governor(目前調頻政策)。
超頻至700MHz:隻需修改設定樹檔案中cpu0資訊,添加 792000 1225000
編譯裝置樹指令:
make dtbs
2、使能8線EMMC驅動
Linux核心驅動預設EMMC是4線模式,将其修改為8線。修改裝置樹檔案。
734 &usdhc2 {735 pinctrl-names = "default";736 pinctrl-0 = ;737 non-removable;738 status = "okay";739};
将其修改為一下内容734 &usdhc2 {735 pinctrl-names = "default", "state_100mhz", "state_200mhz";736 pinctrl-0 = ;737 pinctrl-1 = ;738 pinctrl-2 = ;739 bus-width = <8>;740 non-removable;741 status = "okay";742 };
編譯裝置樹指令:
make dtbs
3、修改網絡驅動
NXP官方開發闆使用的是KSZ8081,正點原子使用的LAN8720,兩款晶片的複位IO不同。需要修改網絡驅動。
1、修改LAN8720的複位引腳驅動
屏蔽SPI4使用到的SNVS_TAMPER7和SNVS_TAMPER8管腳,也即GPIO5_IO07、GPIO5_IO08
在ENET1和ENET2中添加兩個管腳的配置
2、修改LAN8720A的PHY位址
修改&fec1、&fec2的内容,分别添加
phy-reset-gpios = ;
phy-reset-duration = <26>;
phy-reset-gpios = ;
phy-reset-duration = <26>;
3、修改fec_main.c檔案
打 開drivers/net/ethernet/freescale/fec_main.c,找到函數 fec_probe,添加一以下代碼:
void __iomem *IMX6U_ENET1_TX_CLK;void __iomem *IMX6U_ENET2_TX_CLK;
IMX6U_ENET1_TX_CLK= ioremap(0X020E00DC, 4);
writel(0X14, IMX6U_ENET1_TX_CLK);
IMX6U_ENET2_TX_CLK= ioremap(0X020E00FC, 4);
writel(0X14, IMX6U_ENET2_TX_CLK);
設定了ENET1和ENET2的TX_CLK引腳複位寄存器的SION位為1。
4、配置Linux核心,使能LAN8720驅動
-> Device Drivers
-> Network device support
-> PHY Device support and infrastructure
-> Drivers for SMSC PHYs
5、修改smsc.c檔案
修改drivers/net/phy/smsc.c檔案中的smsc_phy_reset函數。
6、儲存.config檔案
1、直接另存配置好的.config檔案
2、通過圖形接面儲存配置檔案,可使用相對路徑(相對Linux核心源碼根目錄),一般儲存在arch/arm/configs/