IMX6ULL裸机开发学习
以下内容是我在学习正点原子IMX6ULL
开发板alpha
中记录的笔记,部分摘录自正点原子IMX6ULL开发手册
。
1. 移植NXP官方 uboot 到 alpha 开发板
添加板子默认配置文件
借鉴NXP官方6ull evk 开发板,修改NXP官方6ull evk开发板配置文件
configs/mx6ull_14x14_evk_emmc_defconfig
并重命名。1
2
3
4
5CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_myboard_emmc/imximage.cfg,MX6ULL_EVK_EMMC_REWORK"
CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_TARGET_MX6ULL_MYBOARD_EMMC=y
CONFIG_CMD_GPIO=y添加板子对应的头文件
不同的板子,有一些需要配置的信息,一般是在一个头文件里配置,每个板子有一个。对于NXP官方的6ULL EVK板子,头文件是
include/configs/mx6ullevk.h
,复制该文件为mx6ull_myboard_emmc.h
,然后修改mx6ull_myboard_emmc.h
该文件内的条件编译为1
2#ifndef __MX6ULL_MYBOARD_EMMC_CONFIG_H
#define __MX6ULL_MYBOARD_EMMC_CONFIG_H添加板子对应的板级文件夹
每个板子都有特有的文件,也叫板级文件。这里我们将6ULL EVK的板级文件夹
board/freescale/mx6ullevk
直接拷贝一份,并重命名为mx6ull_myboard_emmc
。修改mx6ull_myboard_emmc
文件夹中的mx6ullevk.c
Makefile
imximage.cfg
Kconfig
MAINTAINERS
文件。 最后需要修改arch/arm/cpu/armv7/mx6/Kconfig
文件,添加以下代码1
2
3
4
5
6
7config TARGET_MX6ULL_MYBOARD_EMMC
bool "Support mx6ull_myboard_emmc"
select MX6ULL
select DM
select DM_THERMAL
source "board/freescale/mx6ull_myboard_emmc/Kconfig"修改uboot图形配置界面
LCD驱动修改
修改
board/mx6ull_myboard_emmc/mx6ull_myboard_emmc.c
include/configs/mx6ull_myboard_emmc.h
文件来修改驱动。- 确认LCD IO 初始化正确,修改
mx6ull_myboard_emmc.c
中的LCD_PADS - 修改LCD 参数,
mx6ull_myboard_emmc.c
中的displays。fb_videomode表示RGB LCD参数。 - 修改
mx6ull_myboard_emmc.h
的环境变量panel=TFT43AB 为mx6ull_myboard_emmc.c
中display_info_t const displays[]
中的name
值。
- 确认LCD IO 初始化正确,修改
网络驱动修改
LAN8720有一个管理接口,叫做MDIO,有两根线
MDIO
、MDC
,一个MDIO接口可以管理32个PHY芯片。MDIO通过PHY ADDR
来确定访问哪个PHY芯片。ALPHA开发板的ENET1
的PHY ADDR
是0x0
,ENET2
的PHY ADDR是0x1
;每个LAN8720都有一个复位引脚,ENET1是SNVS_TAMPER8
。LAN8720驱动,因为所有的PHY芯片的前16个寄存器一模一样,因此uboot里面已经写好了通用PHY驱动,所以理论上不需要修改。
- 修改
mx6ull_myboard_emmc.h
文件中的PHY ADDR
1 |
- 删除原有的74LV595的驱动代码
1 |
为
1 |
然后删除和74LV595有关的代码,添加ALPHA开发板驱动代码。
分别在mx6ull_myboard_emmc.c
中的fec1_pads[]
和fec2_pads[]
中添加以下代码
1 | //fec1_pads[] |
修改setup_iomux_fec(int fec_id)
函数为以下代码
1 | static void setup_iomux_fec(int fec_id) |
在int genphy_update_link(struct phy_device *phydev)
中的最上面添加以下代码
1 |
|
2. Uboot命令
命令 | 格式 | 说明 |
---|---|---|
md | md[.b, .w, .l] address [# of objects] | 用于显示内存值 |
nm | nm [.b, .w, .l] address | 用于修改指定地址的值,q退出 |
mm | mm [.b, .w, .l] address | 如上,地址会自增 |
cp | cp [.b, .w, .l] source target count | 数据拷贝命令,用于将 DRAM 中的数据从一段内存拷贝到另一段内存中,或者把 Nor Flash 中的数据拷贝到 DRAM 中 |
mmc | mmc 是一系列的命令。?mmc 查询 | uboot 支持 EMMC 和 SD 卡,因此也要提供 EMMC 和 SD 卡的操作命令。一般认为 EMMC 和 SD 卡是同一个东西。 |
fatinfo | fatinfo <interface> [<dev[:part]>] | 查询指定 MMC 设置指定分区的文件系统信息,例如fatinfo mmc 1:1 |
fatls | fatls <interface> [<dev[:part]>] [directory] | 用于查询 FAT 格式设备的目录和文件信息,如fatls mmc 1:1 ,查询 EMMC 分区 1 中的所有的目录和文件。 |
fstype | fstype <interface> <dev>:<part> | 查看 MMC 设备某个分区的文件系统格式,如fstype mmc 1:0 |
fatload | fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]] | 用于将指定的文件读取到 DRAM 中,如fatload mmc 1:1 80800000 zImage |
bootz | bootz [addr [initrd[:size]] [fdt]] | 引导[启动]Linux(zImage),如bootz 80800000 – 83000000 ,80800000存放着Linux内核,83000000是设备树,不使用initrd时,使用-代替 |
go | go addr [arg …] | 用于跳到指定的地址处执行应用,如tftp 87800000 printf.bin go 87800000 |
3. Uboot 图形化配置方法
通过终端配置
首先进入到uboot的源码路径下
然后使用默认配置
make mx6ull_myboard_emmc_defconfig
进行默认配置输入
make menuconfig
打开图形化界面。注意:如果出现错误,需要安装ncurses
库。1
2
3sudo apt install build-essential
sudo apt install libncurses5
sudo apt install libncurses5-dev图形化配置界面对于一个功能的编译或者叫做选择有三种模式。
- Y:对应的功能编译到uboot里面。
- N:对应的功能不编译到uboot里面。
- M:将对应的功能编译成模块,linux内常用,uboot不支持。
当我们配置好后,因为只是写入到
.config
文件中,清理工程后会丢失,因此需要保存自己的配置文件。在图形配置界面,选择save
选项来保存,使用load
选项来加载配置文件。
- 本文作者: 路痴的兔子
- 本文链接: https:/proudrabbit.gitee.io/IMX6ULL学习笔记-五.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!