ITOP4412开发板开发环境搭建、内核、uboot编译流程

举报
DS小龙哥 发表于 2022/06/22 22:03:08 2022/06/22
3.3k+ 0 0
【摘要】 介绍讯为ITOP4412开发板PC机上的开发环境搭建,演示了内核、uboot编译烧写流程,分析了uboot源码,找到环境变量存放的位置,并且编写了一个清除环境变量的命令,运行阶段可以清除内存里的uboot环境变量。

介绍讯为ITOP4412开发板PC机上的开发环境搭建,演示了内核、uboot编译烧写流程,分析了uboot源码,找到环境变量存放的位置,并且编写了一个清除环境变量的命令,运行阶段可以清除内存里的uboot环境变量。

开发环境:讯为ITOP4412精英板,POP封装 ,1GDDR内存

一、 交叉编译器

讯为光盘地址:\iTOP-4412精英版光盘资料\02_编译器以及烧写工具\arm交叉编译器\arm-2009q3.tar.bz2

加环境变量:# vim /etc/profile

export PATH=/work/arm-2009q3/bin/:$PATH

生效环境变量:# source /etc/profile

二、uboot编译

讯为光盘路径:\iTOP-4412精英版光盘资料\06_源码_uboot和kernel\iTop4412_uboot_20151119.tar.gz

编译命令:

# ./build_uboot.sh POP_1GDDR

三、内核编译

root@wbyq:/work/iTop4412_Kernel_3.0# cp config_for_android_pop_elite .config

root@wbyq:/work/iTop4412_Kernel_3.0# make zImage

配置内核时需要安装的相关库:(make menuconfig命令需要用到)

sudo apt-get install libncurses5-dev

编译成功之后生成的zImage路径:

四、ITOP4412讯为开发板文件系统烧写步骤

4.1 先将SD卡制作为启动盘

1)给 TF 卡分区。需要将 TF 卡先插入开发板,然后再启动开发板并进入Uboot 模式,然后在串口CRT终端中,依次输入下列烧写命令:

— fdisk -c 1

注意上面的分区命令的是参数“1”,代表的是 tf 卡,如果是“0”则代表是 eMMC。

如果是 2G 的 TF 卡,请将命令“fdisk -c 1”改为“fdisk -c 1 300 300 300”。

— fatformat mmc 1:1

— ext3format mmc 1:2

— ext3format mmc 1:3

— ext3format mmc 1:4

4.2 制作文件系统映像

首先得有一个完整的根文件系统。

生成文件系统映像的命令:make_ext4fs -s -l 300M -a root -L linux system.img rootfs

解析:

300M 是文件系统映像的大小。

system.img是生成的映像文件名称

rootfs 是将要打包的文件系统目录

注意:文件系统映像的大小可以根据实际将要打包的文件系统目录大小进行设置

4.3 烧写内核与文件系统

注意:如果刷写进入之后系统无法启动成功,可以再将ramdisk-uboot.img文件添加进入。

5. uboot环境变量存放位置分析

从SD卡启动,设备0就表示SD卡。从EMMC启动,设备0就表示EMMC。

根据uboot里保存环境变量到SD卡的svaeenv命令入手,分析环境变量是否存放在SD卡的那个位置。

根据保存环境变量时,弹出的字符串对uboot源码进行全局搜索:

选择正确的选项:

找到保存环境变量函数位置:

根据以上分析得出结论:

当uboot启动时,会先取SD卡的第1025块的位置读取环境变量,如果没有读取成功,就使用代码里定义的默认值。

在uboot命令行里修改环境变量,修改了也是保存在内存里,必须执行svaeenv命令,才会将内存的里的环境变量写入到SD卡上。

​ 代码里保存默认环境变量的文件

根据以上分析,编写恢复默认环境变量的代码如下

#include <common.h>
#include <command.h>
#include <environment.h>
#include <search.h>
#include <errno.h>
#include <malloc.h>
#include <watchdog.h>
#include <serial.h>
#include <linux/stddef.h>
#include <asm/byteorder.h>
#include <nand.h>
#include <onenand_uboot.h>
#include <mmc.h>
#include <asm/arch/cpu.h>
#include <asm/arch/movi_partition.h>

int do_env_clean(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
  mmc_init(find_mmc_device(0)); /*设备初始化*/
  movi_write(0,1025,32,(char *)0x40000000);
	return 0;
}

U_BOOT_CMD(
	cleanenv, 1, 0,	do_env_clean,
	"清除环境变量",
	"清除环境变量-环境变量位置: start_blk=1025,  used_blk=32"
);

如果在设置环境过程中,设置错误,可以使用该命令恢复默认值

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。