uboot

sudo找不到交叉编译器

问题

无法找到交叉编译器
在这里插入图片描述

原因

就是切换root获sudo环境变量不生效问题

  • 不同用户初始的PATH是不一样的。切换用户系统会先将PATH设为初始值,然后再根据调用的初始化脚本,添加PATH中的路径。并不是所有用户共用一个PATH。
  • su - root,产生一个登录shell去执行后面的指令。登录 shell 执行的是shell 登录的流程,会执行 /etc/profile,/etc/profile.d/下定义的*.sh都会执行。
  • su root,产生一个非登录交互shell,非登录交互shell,只执行 用户家目录下 .bashrc等配置文件。
    在这里插入图片描述
  • su - root:以root身份登录,then the shell is login shell, .bash_profile and .bashrc will be sourced.
  • su root/其他命令:与root建立一个连接,通过root执行命令。then only .bashrc will be sourced.
  • 最直接的区别是su目录还是原先用户目录,su - root后目录就变为root用户的主目录。
    因此,可以在.bashrc修改PATH、PHP、APACHE、Mysql等路径。

解决

修改root用户.bashrc文件
在这里插入图片描述
切换root用户编译

编译nxp官方uboot

命令

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4

可设置脚本或在makefile中设置环境变量

在这里插入图片描述

踩在官方的肩膀上移植

基于视频教程,有些与教程不一样,更多的就是改名字,除了驱动部分。

添加开发板默认配置文件

CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ullevk/imximage.cfg,MX6ULL_EVK_EMMC_REWORK"

Uboot.imx头部信息,时钟什么的,就是改这个文件。

修改为:

CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_alientek_ 
emmc/imximage.cfg,MX6ULL_EVK_EMMC_REWORK" 

在这里插入图片描述
修改依赖文件名字。

添加开发板对应的头文件

在这里插入图片描述
mx6ull_alientek_emmc.h文件其他先不修改。

添加开发板对应的板级文件夹

修改makefile

在这里插入图片描述

修改imximage.cfg

在这里插入图片描述

修改Kconfig

在这里插入图片描述

修改MAINTAINERS

在这里插入图片描述

修改 U-Boot 图形界面配置文件

这个很关键,不然改了相当于没改。
在这里插入图片描述
在这里插入图片描述

编译测试

出现mx6ull_alientek_emmc.o,代表编译了改板级支持包。
在这里插入图片描述
在这里插入图片描述
mx6ull_alientek_emmc.h文件也被多次调用。
在这里插入图片描述
大功告成。

LCD 驱动修改

引脚:
在这里插入图片描述

//	/* Reset the LCD */
//	gpio_direction_output(IMX_GPIO_NR(5, 9) , 0);
//	udelay(500);
//	gpio_direction_output(IMX_GPIO_NR(5, 9) , 1);

主要修改这:
在这里插入图片描述

没有修改环境变量

在这里插入图片描述

解决

也可以设置环境变量,最优解还是改文件。
在这里插入图片描述

修改网络驱动

mx6ull采用内部mac+外部phy方式,因为是芯片不支持一套流,正点原子换芯片了,外部phy采用的是ksz8081,所以这里网络修改是大头。

修改mx6ull_alientek_emmc.h

在这里插入图片描述
注意注释问题。在这里插入图片描述

修改mx6ull_alientek_emmc.c

添加引脚定义
在这里插入图片描述
删除 uboot 中 74LV595 的驱动代码

宏定义
#define IOX_SDI IMX_GPIO_NR(5, 10)
#define IOX_STCP IMX_GPIO_NR(5, 7)
#define IOX_SHCP IMX_GPIO_NR(5, 11)
#define IOX_OE IMX_GPIO_NR(5, 8)
数组
static iomux_v3_cfg_t const iox_pads[]
函数
static void iox74lv_init(void)
void iox74lv_set(int index)
语句
imx_iomux_v3_setup_multiple_pads(iox_pads, ARRAY_SIZE(iox_pads));
 iox74lv_init();

添加语句

在这里插入图片描述

修改 drivers/net/phy/phy.c 文件中的函数 genphy_update_link

在这里插入图片描述

setenv ipaddr 192.168.1.55 
//开发板 IP 地址 
setenv ethaddr b8:ae:1d:01:00:00 
//开发板网卡 MAC 地址 
setenv gatewayip 192.168.1.1 
//开发板默认网关 
setenv netmask 255.255.255.0 
//开发板子网掩码 
setenv serverip 192.168.1.250 
//服务器地址,也就是 Ubuntu 地址 
saveenv 
//保存环境变量

测试enet2

在这里插入图片描述

测试enet1

在这里插入图片描述
修改头文件中的宏定义即科修改使用网口。

修改板子名称

在这里插入图片描述

uboot启动linux内核测试

emmc启动

切换到emmc

mmc dev 1

在这里插入图片描述

查看emmc是否有镜像

mmc 1的一个分区1;
在这里插入图片描述
这里不切换也是可以的
在这里插入图片描述
把mmc1分区1的zimage下载到ddr的ox80800000地址。
在这里插入图片描述
在这里插入图片描述

启动内核

bootz 80800000 - 83000000

启动成功,说明支持emmc启动
在这里插入图片描述
在这里插入图片描述

网络启动

查看是否能通信

在这里插入图片描述

从tftp下载

勾八网络
在这里插入图片描述
没有下载zImage加载到ddr是启动不了的
在这里插入图片描述
网络太垃圾,用tftp加载设备树,用emmc加载内核,启动成功。
在这里插入图片描述

bootcmd 和 bootargs 环境变量

mx6ull_alientek_emmc.h文件中有定义,就比如lcd屏幕那里的id
可以修改这,也可以启动uboot再设置环境变量。

bootcmd

uboot倒计时完,用来启动 Linux 内核的,比如读取 EMMC 或 者 从tftp 中的 Linux 内核镜像文件和设备树文件到 DRAM 中,然后启动 Linux 内核。

格式

setenv bootcmd 'mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb; bootz 80800000 - 83000000;'

其实和我们手动从emmc启动是一样的,当时使用起来你不可能叫别人手动启动吧,使用再uboot倒计时后就是执行的这个命令。

在这里插入图片描述

测试

在这里插入图片描述

bootargs

bootargs 保存着 uboot 传递给 Linux 内核的参数。

格式

setenv bootargs console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw
console
  • console 用来设置 linux 终端(或者叫控制台),也就是通过什么设备来和 Linux 进行交互,是串口还是 LCD 屏幕?如果是串口的话应该是串口几等等。
  • 这里设置 console 为 ttymxc0,因为 linux启动以后 I.MX6ULL 的串口 1 在 linux 下的设备文件就是/dev/ttymxc0,ttymxc0 后面有个“,115200”,这是设置串口的波特率,console=ttymxc0,115200 综合起来就是设置 ttymxc0(也就是串口 1)作为 Linux 的终端,并且串口波特率设置为 115200。
root
  • root 用来设置根文件系统的位置,root=/dev/mmcblk1p2 用于指明根文件系统存放在mmcblk1 设备的分区 2 中。
  • EMMC 版本的核心板启动 linux 以后会存在/dev/mmcblk0、/dev/mmcblk1、/dev/mmcblk0p1、/dev/mmcblk0p2、/dev/mmcblk1p1 和/dev/mmcblk1p2 这样的文件,
  • 其中/dev/mmcblkx(x=0~n)表示 mmc 设备,而/dev/mmcblkxpy(x=0n,y=1n)表示mmc 设备x 的分区 y。
  • 在 I.MX6U-ALPHA 开发板中/dev/mmcblk1 表示 EMMC,而/dev/mmcblk1p2 表示EMMC 的分区 2。
  • root 后面有“rootwait rw”,rootwait 表示等待 mmc 设备初始化完成以后再挂载,否则的话mmc 设备还没初始化完成就挂载根文件系统会出错的。
  • rw 表示根文件系统是可以读写的,不加rw 的话可能无法在根文件系统中进行写操作,只能进行读操作。
rootfstype
  • 此选项一般配置 root 一起使用,rootfstype 用于指定根文件系统类型,如果根文件系统为ext 格式的话此选项无所谓。
  • 如果根文件系统是 yaffs、jffs 或 ubifs 的话就需要设置此选项,指定根文件系统的类型。

测试

注意格式,这个空格什么的都有影响,写错一点可能就无法启动内核。

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

在这里插入图片描述

从网络更新sd卡和emmc的uboot

更新到sd卡


424960/512=830,一共烧写 742(0x33E)个块。

=> mmc dev 0 0
switch to partitions #0, OK
mmc0 is current device
=> mmc write 80800000 2 33E

MMC write: dev # 0, block # 2, count 830 ... 830 blocks written: OK

未更新前

U-Boot 2016.03 (Mar 29 2022 - 20:14:59 -0700)

更新后

U-Boot 2016.03 (Mar 30 2022 - 12:52:51 +0800)

更新到emmc

mmc dev 1 0 //切换到 EMMC 分区 0 tftp 80800000 u-boot.imx //下载 u-boot.imx 到 DRAM
mmc write 80800000 2 32E //烧写 u-boot.imx 到 EMMC 中
mmc partconf 1 1 0 0 //分区配置,EMMC 需要这一步!
**千万不要写 SD 卡或者 EMMC 的前两个块(扇区),里面保存着分区表!**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值