MX6U系统移植部分笔记

后面的驱动开发很多需要这边的知识,所以还是要看一遍。

u-boot初次编译启动(SD卡启动方式)

首先需要安装ncurses库。

sudo apt-get install libncurses5-dev

解压出厂源码后,需要编译uboot. 这边直接写成一个脚本文件.sh文件,后面直接运行脚本,不需要每次都运行。

#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12

烧写和运行。插入读卡器,找到对应的/dev/sd*,然后下载,

chmod 777 imxdownload //给予 imxdownload 可执行权限,一次即可
./imxdownload u-boot.bin /dev/sdf //烧写到 SD 卡,不能烧写到/dev/sda 或 sda1 设备里面!

 下载完成后将SD卡插入板子,调整到SD卡启动,串口调试窗口打开。在复位的3秒内按回车进入u-boot。

u-boot命令使用

信息查询 bdinfo

打印环境变量 print

修改环境变量(添加新的环境变量)

//设置开机进入系统时间的倒计时5秒
setenv bootdelay 5
saveenv
//创建新的环境变量
setenv author caijilong
saveenv

 

u-boot网络命令的问题

在根据手册上的操作uboot使用ping命令的地方,碰到很多问题。

首先就是没有路由器,我只能将开发板连接上电脑(一根网线),电脑插上网卡连接WIFI。

在按照代码设置好网络ip之后

setenv ipaddr 192.168.1.50
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.253
saveenv 

连接虚拟机出现问题。

问题1:Net: Board Net Initialization Failed No ethernet found

这里是网卡驱动找不到,在找一些资料后,我发觉可能是编译的uboot版本太低了,所以从正点原子下载了新的,原来版本1.5,新的1.7

然后就解决了(就是需要重新复制编译解压下载。)

问题2:ARP Retry count exceeded;starting again ping failed ,~~is not alive

这里我认为是因为没有按教程来操作,因为没有路由器,所以出一些问题。所以搜索了一下如何在开发板和电脑链接的情况下,共享IP地址等。按照这篇文章【Linux-ARM】电脑 WiFi 上网,开发板与电脑直连

可以解决问题。

注意:在连接上开发板后我找了在电脑上开发板显示的地址,但是敲上去后,ping不通,所以可以用手册上的地址,如果后面需要多个设备,那就用不同的MAC地址。

 

nfs下载:

在跟手册发现下载出问题,有file lookup fail提示,发现是nfs的版本,Ubuntu的nfs版本太低了,根据这篇文章nfs下载镜像报错File lookup fail、“TTTTTTTTTTTTTTT”

可以解决问题。

 

tftp下载:

tftp下载也出问题,file not found,通过这篇文章解决,tftp在put上传的时候显示File not found

 

在uboot中移植自己的开发板中的底板网络驱动修改踩坑!!!

在按照开发者手册中,修改网络驱动的时候遇到很多问题,导致网络驱动一直找不到。

1.B站上的视频中用的板子应该是LINUX开发板2.4以前的板子,据我观察可能是2.2(观察电路原理图)。而2.4版本以后的板子对于底板网络芯片更换为SR8201F,且PHY地址也有改变。

2.开发者手册记得下载最新的,我因为手里的开发者手册是旧的,看的视频也是旧的,但是开发板是新的,所以一直没意识到网络驱动这里有换芯片的问题。

3.在按照新的开发者手册的33.2.8小节中修改完之后,发现还是没有网络驱动。这里我想到了之前的最初移植的uboot来试运行的版本也是一开始版本太老,换了个新的之后就有网络驱动了。所以把两个文档(编译后的文档放在一起对照发现了问题)。

左边是我移植的自己的开发板到uboot的,右边是一开始尝试编译的uboot,发现左边的#define CONFIG_PHY_SMSC一开始是没有的。通过文档中说“此宏用于使能 uboot 中 Micrel 公司的 PHY驱动,KSZ8081 这颗 PHY 芯片就是 Micrel 公司生产的,不过 Micrel 已经被 Microchip 收购了。如果要使用 SR8201F,那么就得将 CONFIG_PHY_MICREL 改为 CONFIG_PHY_REALTEK。”文档里的代码不用老公司的SMSC了,但是我通过实验发现必须加上这个才行。(不忘本的好板子。)

 

uboot编译部分的修改

我们编写的mx6ull-alientek-emmc.sh中的编译脚本。第三行和第四行对uboot进行默认配置编译。第二行会清除图形化的配置。所以有时候需要只敲后两行代码。

#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihfmx6ull_14x14_evk_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16

我们可以Makefile中直接给ARCH和CROSS_COMPILE进行赋值,这样就可以使用简短的命令直接编译,在Makefile中加入

ARCH = arm
CROSS_COMPILE = arm-linux-gnueabihf-

然后就可以简短命令

make mx6ull_alientek_emmc_defconfig
make menuconfig
make -j16

 

Linux内核启动

编译内核之前需要先在 ubuntu 上安装 lzop 库

sudo apt-get install lzop

解压配置好的Linux文件,然后编译,直接写成脚本。

#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16

给予可执行文件后,./~.sh运行。

编译完成以后就会在 arch/arm/boot 这个目录下生成一个叫做 zImage 的文件,zImage 就是我们要用的 Linux 镜像文件。另外也会在 arch/arm/boot/dts 下生成很多.dtb 文件,这些.dtb 就是设备树文件。

 

根文件系统初步测试踩坑!!!

在环境配置的时候就已经配置好nfs了,在配置好rootfs后,利用nfs挂载的时候,挂载不上。问题代码:

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

往上面还能发现这个

VFS:Cannot open root device "nfs" or unknown-block(0,0)

经过原子官方给的纠错手册是不行的,在搜索资料后发现可能是使用的nfs版本问题,也有可能是Ubuntu版本的问题,我使用的18,作者写文章出教程的时候还是Ubuntu16.

所以需要在bootargs中指定版本.(跟手册上还是有区别的,尽量不要复制,自己手动敲一遍。)

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.1.250:/home/cjl/linux/nfs/rootfs,v3 ip=192.168.1.251:192.168.1.250:192.168.1.1:255.255.255.0::eth0:off' //设置 bootargs
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000'
saveenv //保存环境变量

 

系统烧写(只记录烧写自己做好的系统)

最后系统烧写,因为之前的都是从虚拟机利用nfs和tftp等网络下载。如果断网之后,就没有用了,所以需要把之前的uboot、linux kernel、.dtb(设备树)和 rootfs 这四个文件烧写到板子上的 EMMC、NAND 或 QSPI Flash 等其他存储设备上。

这样就可以避免断网操作,以及可以拿着板子去别的地方调试。

直接烧写自己做好的系统。将自己Ubuntu下的左边四个文件拿出来,改成右边的名字放在windows下。

那个压缩包文件是根目录文件的压缩,记得保存一下,防止以后出问题就需要重新弄了。

u-boot.imx                   u-boot-imx6ull14x14evk_emmc.imx

zImage                         zImage(不需要重命名)

imx6ull-alientek-emmc.dtb         zImage-imx6ull-14x14-evk-emmc.dtb

rootfs.tar.bz2                    rootfs_nogpu.tar.bz2

利用NXP官方的Mfgtool工具烧写。

我们需要把上面的四个文件复制到mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware/files并替换掉。

把除了压缩包文件之外的三个复制到mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware/firmware

(在我下载出厂源码的时候,我发现按这样的步骤烧不进去,搜资料发现这个firmware不用操作了。)

然后就可以点击双击mfgtool2-yocto-mx-evk-emmc.vbs文件进行烧写了。

 

修改zImage/设备树/的复制到tftpboot中的代码(记录一下,防止忘记)编译~.dts后生成~.dtb文件。复制的是dtb文件

cp arch/arm/boot/dts/imx6ull-alientek-emmc.dtb /home/cjl/linux/tftpboot/ -f

同理,修改后编译出来的zImage,也是移植到这里

cp arch/arm/boot/zImage /home/cjl/linux/tftpboot/ -f

 

posted @ 2022-11-11 13:49  祈愿树下  阅读(325)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css