移植正点原子linux内核
目錄
前言
一、創建VSCODE移植工程
二、修改根目錄下Makefile
?三、添加自己的linux開發板
? ? ? ?1、創建linux開發板配置文件
? ? ? ?2、創建linux開發板設備樹文件
???????3、修改編譯文件
四、編譯并通過網絡驗證移植
? ? ? ? 1、配置uboot環境變量bootargs
? ? ? ? 2、修改bootcmd變量
五、修改網絡驅動
? ? ? ? 1、修改EMMC模式
????????2、修改 LAN8720 的復位以及網絡時鐘引腳驅動
????????3、使能LAN8720驅動
????????4、修改smsc.c文件
總結
前言
學習正點原子I.MX6ULL移植內核
一、創建VSCODE移植工程
將NXP官方的壓縮文件linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2利用Filezilla傳導ubuntu虛擬機中,解壓后修改成自己的命名文件夾,如下圖所示:
并用vscode打開。
二、修改根目錄下Makefile
?????????將根目錄下的Makefile的arm架構交叉編譯器固定方便以后的編譯。如下圖所示:
?三、添加自己的linux開發板
? ? ? ?1、創建linux開發板配置文件
????????將NXP官方的linux配置文件復制并命名為自己的名字,方便以后的修改:arch/arm/configs 目 錄 下 的 imx_v7_mfg_defconfig 重 新 復 制 一 份 , 命 名 為imx_alientek_emmc_defconfig
? ? ? ?2、創建linux開發板設備樹文件
????????添加適合正點原子 EMMC 版開發板的設備樹文件,進入目錄 arch/arm/boot/dts 中,復制一
 份 imx6ull-14x14-evk.dts,然后將其重命名為 imx6ull-alientek-emmc.dts????
???????3、修改編譯文件
? ? ? ? .dts文件在linux編譯的時候會生成.dtb文件,因此需要在配置項中加入新創建的設備樹文件,修改arch/arm/boot/dts/Makefile,如下圖所示添加自己的開發板配置項:
四、編譯并通過網絡驗證移植
? ? ? ? 1、配置uboot環境變量bootargs
????????Linux 內核啟動以后是需要根文件系統的,根文件系統存在哪里是由 uboot 的 bootargs 環境
 變 量 指 定 , bootargs 會 傳 遞 給 Linux 內 核 作 為 命 令 行 參 數。本根文件系統采用正點原子早已燒好到emmc中的系統
?????????bootargs='console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
其中mmcblk1=emmc設備,p2=第二個分區
? ? ? ? 2、修改bootcmd變量
? ? ? ? 設置變量bootcmd=tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000,則可以驗證成功啟動linux,說明成功移植自己的開發板,如下圖所示:
五、修改網絡驅動
? ? ? 1、修改EMMC模式
?????????Linux 內核驅動里面 EMMC 默認是 4 線模式的, 4 線模式肯定沒有 8 線模式的速度快,所
 以本節我們將 EMMC 的驅動修改為 8 線模式。修改方法很簡單,直接修改設備樹即可,打開文
 件 imx6ull-alientek-emmc.dts,找到并修改其中的emmc網絡驅動usdhc2部分如下圖所示:
????????2、修改 LAN8720 的復位以及網絡時鐘引腳驅動
? ? ? ? 正點原子開發板采用的LAN8720復位引腳與默認配置IO不同,故需要修改內容:
? ? ? ? ENET1 復位引腳 ENET1_RST 連接在 I.M6ULL 的 SNVS_TAMPER7 這個引腳上。 ENET2
 的復位引腳 ENET2_RST 連接在 I.MX6ULL 的 SNVS_TAMPER8 上。故需要將SPI4的配置注釋。
? ? ? ? 添加ENET1和ENET2復位管腳配置
由于linux內核默認的網絡驅動地址ENET1是2,ENET2是1,而正點原子開發板對應的地址ENET1是0,ENET2是1故需要做出修改:
修改設備樹,添加復位管腳IO,設置復位時間:
修改完復位IO和通用PHY ID以后,linux內核通用PHY可以正常工作測試如圖所示:
?要在 I.MX6ULL 上使能專用?LAN8720A ,需要修改一下Linux內核源碼 ,打開drivers/net/ethernet/freescale/fec_main.c,找到函數 fec_probe,在 fec_probe 中加入如下代碼
????????使ENET1 和 ENET2 的 TX_CLK 引腳復位寄存器的SION位為1
????????3、使能LAN8720驅動
? ? ? ? 輸入命令:make menuconfig通過圖形化界面配置使能LAN8720驅動,路徑如下
-> Device Drivers
 -> Network device support
 -> PHY Device support and infrastructure
 -> Drivers for SMSC PHYs
重新編譯并啟動可以觀察到網絡驅動變為 LAN8720
并且能成功ping同ubuntu虛擬機
????????4、修改smsc.c文件
? ? ? ? 由于在linux也需要對LAN8720進行1次軟復位,而在默認復位條件是LAN8720處于POWERDOWN模式,而在Uboot中使用了網絡啟動,故LAN8720不肯能處于此模式故要修改復位條件,如圖所示。
static int smsc_phy_reset(struct phy_device *phydev) {int timeout = 50000;int rc = phy_read(phydev, MII_LAN83C185_SPECIAL_MODES);if (rc < 0)return rc;/* If the SMSC PHY is in power down mode, then set it* in all capable mode before using it.*/if ((rc & MII_LAN83C185_MODE_MASK) == MII_LAN83C185_MODE_POWERDOWN) {/* set "all capable" mode and reset the phy */rc |= MII_LAN83C185_MODE_ALL;phy_write(phydev, MII_LAN83C185_SPECIAL_MODES, rc);}phy_write(phydev, MII_BMCR, BMCR_RESET);/* wait end of reset (max 500 ms) */do {udelay(10);if (timeout-- == 0)return -1;rc = phy_read(phydev, MII_BMCR);} while (rc & BMCR_RESET);return 0; }總結
?移植成功!
移植linux內核,一步一步來
總結
以上是生活随笔為你收集整理的移植正点原子linux内核的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: QT 绘图工具-QCustomPlot
 - 下一篇: R语言学习二——工具的使用