日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

移植正点原子linux内核

發(fā)布時(shí)間:2023/12/15 linux 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 移植正点原子linux内核 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

前言

一、創(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。