在uboot中添加自己的开发板(imx6ull)

目录

一、添加或修改的文件

二、编译修改好的uboot(3种方法)

三、修改bootcmd和bootargs环境变量

四、启动linux内核


一、添加或修改的文件

1、添加开发板默认的配置文件

(1)在 configs 目录下创建默认配置文件 mx6ull_alientek_emmc_defconfig,文件内容为:

2、添加开发板对应的头文件

(1) 在 目 录 include/configs 下 添 加 mx6ull_alientek_emmc.h 头文件。

(2) 修改头文件宏定义为:

(3) mx6ull_alientek_emmc.h 文件中基本都是“CONFIG_”开头的宏定义,这也说明此文件的主要功能就是配置或者裁剪 uboot。如果需要某个功能的话就在里面添加这个功能对应的 CONFIG_XXX 宏即可,如果不需要某个功能的话就删除掉对应的宏即可。

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

(1) 在 board/freescale 目录下添加 mx6ull_alientek_emmc 文件夹,修改如下文件:

 a. 添加 mx6ull_alientek_emmc.c 文件

 b. 修改 Makefile 文件:

 c. 修改 imximage.cfg 文件:

 d. 修改 Kconfig 文件:

 e. 修改 MAINTAINERS 文件:

4、修改 uboot 图形界面配置文件

(1) uboot 是支持图形界面配置,修改文件 arch/arm/cpu/armv7/mx6/Kconfig (如果用的 I.MX6UL 的话,应该修改 arch/arm/Kconfig 这个文件):

a. 在 207 行加入如下内容:

b. 在文件末尾加入如下这一行:

二、编译修改好的uboot(3种方法)

1、直接输入命令行编译:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_alientek_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4
 

2、修改顶层Makefile编译:

(1) 直接在顶层 Makefile 中直接给 ARCH 和CORSS_COMPILE 赋值

 (2) 使用如下简短的命令来编译 uboot :
       make mx6ull_alientek_emmc_defconfig
       make V=1 -j4

3、直接创建个 shell 脚本(常用)

(1) 创建 mx6ull_alientek_emmc.sh 脚本文件,文件内容如下:

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

三、修改bootcmd和bootargs环境变量

1、bootcmd

(1) bootcmd 保存着 uboot 默认命令, uboot 倒计时结束以后就会执行 bootcmd 中的命令;

(2) 找到bootcmd命令:include/env_default.h:

      default_environment
         "bootcmd="    CONFIG_BOOTCOMMAND   // include/configs/mx6ull_alientek_emmc.h

(3) bootcmd(CONFIG_BOOTCOMMAND)命令分析:

(4) 如此复杂的设置就是为了从 EMMC 中读取 zImage 镜像文件和设备树文件, 然后启动Linux 内核;经过分析,那么宏CONFIG_BOOTCOMMAND 就可简化为:
    #define CONFIG_BOOTCOMMAND \
    "mmc dev 1;" \   //切换到 EMMC
    "fatload mmc 1:1 0x80800000 zImage;" \   //读取 zImage 到 0x80800000 处
    "fatload mmc 1:1 0x83000000 imx6ull-alientek-emmc.dtb;" \   //读取设备树到 0x83000000 处
    "bootz 0x80800000 - 0x83000000;"  //启动 Linux 内核

(5) 可以直接在 uboot 中设置 bootcmd 的值,这个值就是保存到 EMMC 中的,命令如下:
setenv bootcmd 'mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ullalientek-emmc.dtb; bootz 80800000 - 83000000;'

2、bootargs

(1)bootargs 保存着 uboot 传递给 Linux 内核的参数;

(2) 在include/configs/mx6ull_alientek_emmc.h文件中,bootargs 环境变量是由 mmcargs 设置的, mmcargs 环境变量如下:

 其中 console=ttymxc0, baudrate=115200, mmcroot=/dev/mmcblk1p2 rootwait rw,因此将
mmcargs 展开以后就是:
mmcargs=setenv bootargs console= ttymxc0, 115200 root= /dev/mmcblk1p2 rootwait rw

a. console:用来设置 linux 终端(或者叫控制台),也就是通过什么设备来和 Linux 进行交互,这里设置 console 为 ttymxc0,因为 linux启动以后 I.MX6ULL 的串口 1 在 linux 下的设备文件就是/dev/ttymxc0,ttymxc0 后面有个“,115200”,这是设置串口的波特率;

b. root:root 用来设置根文件系统的位置, root=/dev/mmcblk1p2 用于指明根文件系统存放在
mmcblk1 设备的分区 2 中。root 后面有“rootwait rw”, rootwait 表示等待 mmc 设备初始化完成以后再挂载,否则的话mmc 设备还没初始化完成就挂载根文件系统会出错的。 rw 表示根文件系统是可以读写的,不加 rw 的话可能无法在根文件系统中进行写操作,只能进行读操作。
 

四、启动linux内核

1、从 emmc 中启动 linux 内核 (调试完程序后使用)

(1) 先将编译出来的 Linux 镜像文件 zImage 和设备树文件保存在 EMMC 中, uboot 从 EMMC 中读取这两个文件并启动;

(2) 进入 uboot 命令行,输入:ls mmc 1:1 , 看是否能查找的 zImage 和设备树文件;

(3) 设置 bootargs 和 bootcmd这两个环境变量,设置如下:
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'

setenv bootcmd 'mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000
imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000;'

saveenv

(4) 设置好以后直接输入 boot,或者 run bootcmd 即可启动 Linux 内核,查看启动信息就能看出 linux内核是否正常启动。
 

2、从网络启动 linux 内核(唯一目的就是为了调试)

(1) 将 linux 镜像文件和根文件系统都放到 Ubuntu 下某个指定的文件夹中,这样每次重新编译 linux 内核或者某个 linux 驱动以后只需要使用 cp 命令将其拷贝到这个指定的文件夹中即可,这样就不用需要频繁的烧写 EMMC,这样就加快了开发速度;我们可以通过 nfs 或者 tftp 从 Ubuntu 中下载 zImage 和设备树文件。

(2) 用 nfs 挂接根文件系统

a. 在虚拟机 安装,配置,然后再启动nfs服务;

b. 虚拟机网络设置成桥接模式;

c. 设置开发板的网络环境:

      setenv ipaddr 192.168.1.50        //设置开发板地址
      setenv ethaddr b8:ae:1d:01:00:00   
      setenv gatewayip 192.168.1.1     //设置网关地址
      setenv netmask 255.255.255.0 

      setenv serverip 192.168.1.253     //设置虚拟机地址
      saveenv

d. 在开发板ping通与虚拟机的地址;

e. 设置开发板 bootargs 环境变量:

setenv bootargs ‘console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.31.116:/home/can/linux/nfs/rootfs ip=192.168.31.50:192.168.31.116:192.168.31.1:255.255.255.0::eth0:off’

f. 设置开发板 bootcmd 环境变量:

setenv bootcmd ‘nfs 80800000 192.168.31.116:/home/can/linux/nfs/zImage;nfs 83000000 192.168.31.116:/home/can/linux/nfs/imx6ull-alientek-emmc.dtb;bootz 80800000 - 8300000’

 saveenv

g. 设置好以后直接输入 boot,或者 run bootcmd 即可启动 Linux 内核,查看启动信息就能看出 linux内核是否正常启动。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值