100ASK-IMX6ULL開發板移值NXP官方Linux

1.開發環境

  1. gcc: 100ask_imx6ull-sdk\ToolChain\gcc-linaro-6.2.1-2016.11-x86_64_arm-linux- gnueabihf
  2. linux: linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
  3. 主機系統: ubuntu18.04
    gcc可以在百問網提供的bsp包找到,uboot使用的是nxp官方的uboot, 點擊下載Linux。

2.編譯下載NXP官方Linux

2.1 編譯官方Linux

  1. nxp官方提供的linux是用於官方的evk開發板,需要參考官方的代碼來移值,解壓linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
tar -jxvf linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
  1. 修改頂層Makefile,加入ARCHCROSS_COMPILE變量,不然每次編譯都需指定,很麻煩,將252,253行註釋掉。添加後如下:
ARCH		?= arm
CROSS_COMPILE	?= arm-linux-gnueabihf-
  1. 配置並編譯Linux。進入源碼根目錄,執行:
make distclean
make imx_v7_mfg_defconfig /* 此文件爲nxp官方evk板的配置文件,編譯完後zImage支持mfg燒寫 */
make -j12

編譯完後會生成arch/arm/boot/zImagearch/arm/boot/dts/imx6ull-14x14-evk.dtb,這兩個文件是我們需要的。編譯時間跟機器配置有關,我用的I7-9750,16G內存編譯了大概5分鐘。make cleanmake distclean的區別:make clean僅僅是清除之前編譯的可執行文件及配置文件。而make distclean要清除所有生成的文件。

2.2 通過tftp下載測試官方的Linux

linux在啓動後,需要一個根文件系統,可以使用100ASK官方提供的根文件系統,然後使用tftp從ubuntu中下載之前編譯好的官方Linux,最後通過bootz來啓動Linux。

  1. 先通過100ask提供的100ask_imx6ull_flashing_tool下載整個系統到EMMC中,然後將之前移值好的uboot下載到開發板中,可以使用燒寫裸機的方法來燒寫u-boot.imx。燒寫完成後,啓動開發板,串口輸出如下:
    在這裏插入圖片描述
    可以看到開發板沒有啓動成功,原因是在mmc裏面的文件系統識別不了,所以加載不了linux內核和設備樹,然後uboot從網絡啓動,但是沒有設置ip地址。
  2. 設置ipaddr,serverip等環境變量,在uboot命令行執行:
setenv ipaddr 192.168.101.6 //開發板 IP 地址
setenv ethaddr 00:04:9f:04:d2:35 //開發板網卡 MAC 地址
setenv gatewayip 192.168.101.1 //開發板默認網關
setenv netmask 255.255.255.0 //開發板子網掩碼
setenv serverip 192.168.101.5 //服務器地址,也就是 Ubuntu 地址
saveenv //保存環境變量
  1. 設置好後,連接網線到開發板(開發板網線接在路由器上),ubuntu中設置好tftp服務器,並將剛纔編譯好的arch/arm/boot/zImagearch/arm/boot/dts/imx6ull-14x14-evk.dtb複製到tftp目錄下,然後在uboot中執行:
tftp 80800000 zImage 
tftp 83000000 imx6ull-14x14-evk.dtb

下載完後還需要設置bootargs環境變量,該環境變量是在內核啓動時傳給內核的,其指定了使用哪一個控制檯,根文件系統在哪裏等信息,內核啓動後使用該環境變量指定的根文件系統來啓動系統。設置bootargs:

setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'

設置根文件系統root=/dev/mmcblk1p2,即mmc1上的分區2,並且可讀可寫,rootwait表示等待mmc準備好再掛載,這就是之前下載的100ask提供的根文件系統。如果不設置root項,內核會打印根文件系統缺失錯誤:
在這裏插入圖片描述
設置好bootargs後運行:

bootz 80800000 - 83000000

等一會兒後,串口輸出:
在這裏插入圖片描述
就可以進入系統了,看前面的內核輸出,網絡也可以使用了,試着ping一下百度,也可以ping通,說明官方的內核網絡直接就可以在100ask開發板上使用,查看一下內核啓動過程的輸出信息,找到如下信息:
在這裏插入圖片描述說明內核使用的是Generic PHY驅動,即通用PHY驅動,移值uboot的時候說過,PHY芯片的前16個寄存器功能都是一樣的,所以內核使用通用驅動能夠驅動100ask開發板上面的LAN8720A,但是100ask上的LAN8720復位引腳和nxp官方的evk開發板是不一樣的,爲什麼還能驅動呢?我猜可能是再uboot中已經復位過LAN8720A了,所以內核可以直接使用。但是在後面使用nfs網絡文件系統的時候,網絡就會有問題了,到時候再修改網絡驅動吧。其實主要就是修改復位引腳和復位函數。

3.移值NXP官方Linux

測試完官方linux後發現,網絡驅動是可以使用的,那就先不修改網絡驅動了,接下來就是添加自己的配置文件等信息。

3.1 添加開發板配置文件和設備樹文件

  1. 添加開發板配置文件,進入arch/arm/configs目錄,複製一份imx_v7_mfg_defconfig並重命名爲imx_100ask_emmc_defconfig
  2. 添加開發板設備樹文件。進入arch/arm/boot/dts目錄,複製一份imx6ull-14x14-evk.dts並重命名爲imx6ull-100ask-emmc.dts
  3. Makefile中加入imx6ull-100ask-emmc.dts,打開arch/arm/boot/dts/Makefile,在
    dtb-$(CONFIG_SOC_IMX6ULL)項加入imx6ull-100ask-emmc.dtb,添加後如下:
dtb-$(CONFIG_SOC_IMX6ULL) += \
  imx6ull-14x14-ddr3-arm2.dtb \
  imx6ull-14x14-ddr3-arm2-adc.dtb \
  imx6ull-14x14-ddr3-arm2-cs42888.dtb \
  imx6ull-14x14-ddr3-arm2-ecspi.dtb \
  imx6ull-14x14-ddr3-arm2-emmc.dtb \
  imx6ull-14x14-ddr3-arm2-epdc.dtb \
  imx6ull-14x14-ddr3-arm2-flexcan2.dtb \
  imx6ull-14x14-ddr3-arm2-gpmi-weim.dtb \
  imx6ull-14x14-ddr3-arm2-lcdif.dtb \
  imx6ull-14x14-ddr3-arm2-ldo.dtb \
  imx6ull-14x14-ddr3-arm2-qspi.dtb \
  imx6ull-14x14-ddr3-arm2-qspi-all.dtb \
  imx6ull-14x14-ddr3-arm2-tsc.dtb \
  imx6ull-14x14-ddr3-arm2-uart2.dtb \
  imx6ull-14x14-ddr3-arm2-usb.dtb \
  imx6ull-14x14-ddr3-arm2-wm8958.dtb \
  imx6ull-14x14-evk.dtb \
  imx6ull-14x14-evk-btwifi.dtb \
  imx6ull-14x14-evk-emmc.dtb \
  imx6ull-14x14-evk-gpmi-weim.dtb \
  imx6ull-14x14-evk-usb-certi.dtb \
  imx6ull-9x9-evk.dtb \
  imx6ull-9x9-evk-btwifi.dtb \
  imx6ull-9x9-evk-ldo.dtb \
  imx6ull-100ask-emmc.dtb   # 新添加的 
  1. 編譯運行添加的內核,修改完以後,執行:
make distclean
make imx_100ask_emmc_defconfig
make -j12

然後使用網絡啓動內核即可看到內核啓動成功。

3.1 LCD驅動修改

修改LCD驅動其實很簡單,就修改一下設備樹文件就可以了,這裏參考了韋老師的LCD移值筆記
由於100ask和官方evk的背光引腳使用的是同一個引腳,而復位引腳沒有使用,100ask的lcd硬件復位引腳採用的上電自動復位,所以只需要修改LCD的時序參數就可以了。打開arch/arm/boot/dts/imx6ull-100ask-emmc.dts,找到display0: display,修改後如下:

display0: display {
	bits-per-pixel = <24>;
	bus-width = <24>;

	display-timings {
		native-mode = <&timing0>;
		timing0: timing0 {
		clock-frequency = <50000000>;
		hactive = <1024>;
		vactive = <600>;
		hfront-porch = <160>;
		hback-porch = <140>;
		hsync-len = <20>;
		vback-porch = <20>;
		vfront-porch = <12>;
		vsync-len = <3>;

		hsync-active = <0>;
		vsync-active = <0>;
		de-active = <1>;
		pixelclk-active = <0>;
		};
	};
};

修改完後執行:

make dtbs

make dtbs只編譯設備樹文件,

3.2 網絡驅動修改

網絡驅動在移值根文件系統的時候再修改。暫時可以使用。

3.3 測試修改後的Linux

將上面編譯好的zImageimx6ull-100ask-emmc.dtb放入tftp服務器目錄,然後開發板下載並啓動後,可以看到,在uboot啓動階段,LCD顯示的是NXP的logo,在內核加載並運行後,LCD的左上角顯示了的linux系統的logo,一隻小🐧,啓動完成後進入了100ask的功能測試界面,因爲這裏使用的是100ask提供的根文件系統,說明LCD驅動已經正常工作了,但是觸摸屏沒有用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章