天天看點

Linux核心變量運作可修改,Linux4.1.15核心移植-imx6ull

一、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/