后面的驱动开发很多需要这边的知识,所以还是要看一遍。
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
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
然后就可以点击双击mfgtool2-yocto-mx-evk-emmc.vbs文件进行烧写了。
标签:COMPILE,make,CROSS,笔记,MX6U,linux,ARCH,arm,移植 From: https://www.cnblogs.com/cjl520/p/16871438.html