首页 > 其他分享 >MX6U系统移植部分笔记

MX6U系统移植部分笔记

时间:2022-11-11 13:56:23浏览次数:77  
标签:COMPILE make CROSS 笔记 MX6U linux ARCH arm 移植

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

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

相关文章

  • 3.USB移植
    项目要求USB设备为打印机设备,bulk传输,所以将官方的CDC例程进行修改1.将\HC32F4A0_DDL_Rev2.0.0\projects\ev_hc32f4a0_lqfp176\applications\usb\usb_dev_cdc\source中的......
  • 20201306吴龙灿第十三章学习笔记
    知识点归纳第十三章TCP/IP和网络编程学习目标通过本章的学习,了解TCP/IP协议及其应用,包括TCP/IP协议栈,ip地址,主机名,DNS,IP数据包和路由器;理解TCP/IP协议簇中的UDP和TCP......
  • Redis笔记
     编译redis   将redis安装到制定目录下面/usr/local/redis   查看安装目录       启动redis服务器   前台启动redis后台启动将r......
  • Pytorch笔记:dataloader的collate_fn参数在加载数据集时的作用
    1.前言最近在复现MCNN时发现一个问题,ShanghaiTech数据集图片的尺寸不一,转换为tensor后的shape形状不一致,无法直接进行多batch_size的数据加载。经过查找资料,有人提到可以......
  • 20201208史逸霏第十三章学习笔记
    第十三章读书笔记13.1TCP/IP协议IPv432位地址IPv6128位地址TCP/IP的哥哥层级以及每一层及的代表性组件及其功能顶层是使用TCP/IP的应用程序,用于登录到远程主机......
  • 学习笔记-frida硬件准备
    • 1.3Android/iOS– 1.3.1Androidroot• 1.3.1.1硬件准备• 1.3.1.2刷入官方Android8.1• 1.3.1.3刷入twrprecovery• 1.3.1.4刷入Magisk• 1.3.1.......
  • 学习笔记-Xposed特征收集
    XPOSED魔改一:获取特征写在前面准备环境:选择XPOSED版本v89准备环境:选择谷歌原版镜像7.1.2准备环境:使用SuperSU进行root准备环境:安装Xposed框架并激活插件收集特征:底......
  • 学习笔记-frida入门一
    ##以下的脚本和案例都是参照肉丝师傅的github上的文章的,文章是夹杂我个人的理解来写的,也算是一种学习了。一.Frida脚本的概率并实现一个简单的hello-worldfrida脚本......
  • 学习笔记-Frida构造数组,对象,Map和类参数
    Frida构造数组,对象,Map和类参数数组/(字符串)对象数组/gson/Java.array对象/多态,强转Java.cast接口interface,Java.register枚举,泛型,List,Map,Set,迭代打印重要思路:开......
  • 学习笔记-Frida综合案例
    Frida综合情景案例六层锁机案例调用静态函数和调用非静态函数设置(同名)成员变量内部类,枚举类的函数并hook,trace原型1查找接口,hook动态加载dex-“补充一个找interfa......