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 80800000 zImage tftp 83000000 imx6ull-14x14-evk.dtb bootz 8080000083000000

  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 #配置默認調頻策略為ONDEMAND 42 CONFIG_CPU_FREQ_GOV_POWERSAVE=y 43 CONFIG_CPU_FREQ_GOV_USERSPACE=y 44 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 = <&pinctrl_usdhc2>; 737 non-removable; 738 status = "okay"; 739 }; 將其修改為一下內容 734 &usdhc2 { 735 pinctrl-names = "default", "state_100mhz", "state_200mhz"; 736 pinctrl-0 = <&pinctrl_usdhc2_8bit>; 737 pinctrl-1 = <&pinctrl_usdhc2_8bit_100mhz>; 738 pinctrl-2 = <&pinctrl_usdhc2_8bit_200mhz>; 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 = <&gpio5 7 GPIO_ACTIVE_LOW>;/*網絡復位引腳為GPIO5_IO07,低電平有效*/
    phy-reset-duration = <26>;/*復位低電平信號持續時間為26ms*/

    phy-reset-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;/*網絡復位引腳為GPIO5_IO08,低電平有效*/
    phy-reset-duration = <26>;/*復位低電平信號持續時間為26ms*/

    3、修改fec_main.c文件
    打 開drivers/net/ethernet/freescale/fec_main.c,找到函數 fec_probe,添加一以下代碼:

/* 設置 MX6UL_PAD_ENET1_TX_CLK 和 MX6UL_PAD_ENET2_TX_CLK * 這兩個 IO 的復用寄存器的 SION 位為 1。 */
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/


  以上內容是基於《正點原子I.MX6U嵌入式Linux驅動開發指南V1.0》的第37章進行的摘要。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM