移植正点原子linux内核
目錄
前言
一、創(chuàng)建VSCODE移植工程
二、修改根目錄下Makefile
?三、添加自己的linux開(kāi)發(fā)板
? ? ? ?1、創(chuàng)建linux開(kāi)發(fā)板配置文件
? ? ? ?2、創(chuàng)建linux開(kāi)發(fā)板設(shè)備樹(shù)文件
???????3、修改編譯文件
四、編譯并通過(guò)網(wǎng)絡(luò)驗(yàn)證移植
? ? ? ? 1、配置uboot環(huán)境變量bootargs
? ? ? ? 2、修改bootcmd變量
五、修改網(wǎng)絡(luò)驅(qū)動(dòng)
? ? ? ? 1、修改EMMC模式
????????2、修改 LAN8720 的復(fù)位以及網(wǎng)絡(luò)時(shí)鐘引腳驅(qū)動(dòng)
????????3、使能LAN8720驅(qū)動(dòng)
????????4、修改smsc.c文件
總結(jié)
前言
學(xué)習(xí)正點(diǎn)原子I.MX6ULL移植內(nèi)核
一、創(chuàng)建VSCODE移植工程
將NXP官方的壓縮文件linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2利用Filezilla傳導(dǎo)ubuntu虛擬機(jī)中,解壓后修改成自己的命名文件夾,如下圖所示:
并用vscode打開(kāi)。
二、修改根目錄下Makefile
?????????將根目錄下的Makefile的arm架構(gòu)交叉編譯器固定方便以后的編譯。如下圖所示:
?三、添加自己的linux開(kāi)發(fā)板
? ? ? ?1、創(chuàng)建linux開(kāi)發(fā)板配置文件
????????將NXP官方的linux配置文件復(fù)制并命名為自己的名字,方便以后的修改:arch/arm/configs 目 錄 下 的 imx_v7_mfg_defconfig 重 新 復(fù) 制 一 份 , 命 名 為imx_alientek_emmc_defconfig
? ? ? ?2、創(chuàng)建linux開(kāi)發(fā)板設(shè)備樹(shù)文件
????????添加適合正點(diǎn)原子 EMMC 版開(kāi)發(fā)板的設(shè)備樹(shù)文件,進(jìn)入目錄 arch/arm/boot/dts 中,復(fù)制一
份 imx6ull-14x14-evk.dts,然后將其重命名為 imx6ull-alientek-emmc.dts????
???????3、修改編譯文件
? ? ? ? .dts文件在linux編譯的時(shí)候會(huì)生成.dtb文件,因此需要在配置項(xiàng)中加入新創(chuàng)建的設(shè)備樹(shù)文件,修改arch/arm/boot/dts/Makefile,如下圖所示添加自己的開(kāi)發(fā)板配置項(xiàng):
四、編譯并通過(guò)網(wǎng)絡(luò)驗(yàn)證移植
? ? ? ? 1、配置uboot環(huán)境變量bootargs
????????Linux 內(nèi)核啟動(dòng)以后是需要根文件系統(tǒng)的,根文件系統(tǒng)存在哪里是由 uboot 的 bootargs 環(huán)境
變 量 指 定 , bootargs 會(huì) 傳 遞 給 Linux 內(nèi) 核 作 為 命 令 行 參 數(shù)。本根文件系統(tǒng)采用正點(diǎn)原子早已燒好到emmc中的系統(tǒng)
?????????bootargs='console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
其中mmcblk1=emmc設(shè)備,p2=第二個(gè)分區(qū)
? ? ? ? 2、修改bootcmd變量
? ? ? ? 設(shè)置變量bootcmd=tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000,則可以驗(yàn)證成功啟動(dòng)linux,說(shuō)明成功移植自己的開(kāi)發(fā)板,如下圖所示:
五、修改網(wǎng)絡(luò)驅(qū)動(dòng)
? ? ? 1、修改EMMC模式
?????????Linux 內(nèi)核驅(qū)動(dòng)里面 EMMC 默認(rèn)是 4 線模式的, 4 線模式肯定沒(méi)有 8 線模式的速度快,所
以本節(jié)我們將 EMMC 的驅(qū)動(dòng)修改為 8 線模式。修改方法很簡(jiǎn)單,直接修改設(shè)備樹(shù)即可,打開(kāi)文
件 imx6ull-alientek-emmc.dts,找到并修改其中的emmc網(wǎng)絡(luò)驅(qū)動(dòng)usdhc2部分如下圖所示:
????????2、修改 LAN8720 的復(fù)位以及網(wǎng)絡(luò)時(shí)鐘引腳驅(qū)動(dòng)
? ? ? ? 正點(diǎn)原子開(kāi)發(fā)板采用的LAN8720復(fù)位引腳與默認(rèn)配置IO不同,故需要修改內(nèi)容:
? ? ? ? ENET1 復(fù)位引腳 ENET1_RST 連接在 I.M6ULL 的 SNVS_TAMPER7 這個(gè)引腳上。 ENET2
的復(fù)位引腳 ENET2_RST 連接在 I.MX6ULL 的 SNVS_TAMPER8 上。故需要將SPI4的配置注釋。
? ? ? ? 添加ENET1和ENET2復(fù)位管腳配置
由于linux內(nèi)核默認(rèn)的網(wǎng)絡(luò)驅(qū)動(dòng)地址ENET1是2,ENET2是1,而正點(diǎn)原子開(kāi)發(fā)板對(duì)應(yīng)的地址ENET1是0,ENET2是1故需要做出修改:
修改設(shè)備樹(shù),添加復(fù)位管腳IO,設(shè)置復(fù)位時(shí)間:
修改完復(fù)位IO和通用PHY ID以后,linux內(nèi)核通用PHY可以正常工作測(cè)試如圖所示:
?要在 I.MX6ULL 上使能專用?LAN8720A ,需要修改一下Linux內(nèi)核源碼 ,打開(kāi)drivers/net/ethernet/freescale/fec_main.c,找到函數(shù) fec_probe,在 fec_probe 中加入如下代碼
????????使ENET1 和 ENET2 的 TX_CLK 引腳復(fù)位寄存器的SION位為1
????????3、使能LAN8720驅(qū)動(dòng)
? ? ? ? 輸入命令:make menuconfig通過(guò)圖形化界面配置使能LAN8720驅(qū)動(dòng),路徑如下
-> Device Drivers
-> Network device support
-> PHY Device support and infrastructure
-> Drivers for SMSC PHYs
重新編譯并啟動(dòng)可以觀察到網(wǎng)絡(luò)驅(qū)動(dòng)變?yōu)?LAN8720
并且能成功ping同ubuntu虛擬機(jī)
????????4、修改smsc.c文件
? ? ? ? 由于在linux也需要對(duì)LAN8720進(jìn)行1次軟復(fù)位,而在默認(rèn)復(fù)位條件是LAN8720處于POWERDOWN模式,而在Uboot中使用了網(wǎng)絡(luò)啟動(dòng),故LAN8720不肯能處于此模式故要修改復(fù)位條件,如圖所示。
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; }總結(jié)
?移植成功!
移植linux內(nèi)核,一步一步來(lái)
總結(jié)
以上是生活随笔為你收集整理的移植正点原子linux内核的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: QT 绘图工具-QCustomPlot
- 下一篇: 正点原子嵌入式linux视频教程,正点原