OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4054|回复: 0

IMX6ULL 驱动开发指南之u-boot移植错误

[复制链接]

4

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2020-8-28
在线时间
10 小时
发表于 2020-9-22 21:10:29 | 显示全部楼层 |阅读模式
跟着原子哥的IMX6ULL驱动开发指南一步步移植u-boot,最后编译报错了。


经过一番查找/修改后总算是编译通过了(小有成就感)。


首先按照手册一步步走,中间任何一步都是和驱动开发指南一致的。当然了,我并没有直接拷贝手册上的,而是一个个字符敲出来的,并且没有敲错。


u-boot编译报错如下:

cmd/nvedit.c:56:3: 错误: #error Define one of CONFIG_ENV_IS_IN_{EEPROM|FLASH|DATAFLASH|ONENAND|SPI_FLASH|NVRAM|MMC|FAT|REMOTE|UBI|SATA} or CONFIG_ENV_IS_NOWHERE

# error Define one of CONFIG_ENV_IS_IN_{EEPROM|FLASH|DATAFLASH|ONENAND|\
   ^
scripts/Makefile.build:280: recipe for target 'cmd/nvedit.o' failed
make[1]: *** [cmd/nvedit.o] Error 1
Makefile:1199: recipe for target 'cmd' failed
make: *** [cmd] Error 2


经排查,定位到错误在mx6ull_alientek_emmc.h文件中

按照手册上的来(手册上852页,244行到255行之间有一个省略号,个人理解这个省略号是表示删除相应的部分),也就是说下面几行代码是被删掉了的

#ifdef CONFIG_SYS_BOOT_QSPI
#define CONFIG_FSL_QSPI
#define CONFIG_ENV_IS_IN_SPI_FLASH
#elif defined CONFIG_SYS_BOOT_NAND
#define CONFIG_SYS_USE_NAND
#define CONFIG_ENV_IS_IN_NAND
#else
#define CONFIG_FSL_QSPI
#define CONFIG_ENV_IS_IN_MMC
#endif


而上面的报错就是因为上面几行代码被删除掉了而报错的。更确切的说是 CONFIG_ENV_IS_IN_MMC 宏没有被定义而导致的。

那为什么没有定义这个宏会报错呢?继续往下看。手册853页第295行代码,错误的关键就在这行代码。因为上面那个宏没有被定义,所以环境变量的偏移量就没有被定义,从而导致编译报错了。

修改如下:
#ifdef CONFIG_SYS_BOOT_QSPI
#define CONFIG_FSL_QSPI
#define CONFIG_ENV_IS_IN_SPI_FLASH
#elif defined CONFIG_SYS_BOOT_NAND
#define CONFIG_SYS_USE_NAND
#define CONFIG_ENV_IS_IN_NAND
#else
#define CONFIG_FSL_QSPI
#define CONFIG_ENV_IS_IN_MMC
#endif


这几行代码不要删掉,因为CONFIG_SYS_BOOT_QSPI没有被定义,所以就定义了CONFIG_FSL_QSPI、 CONFIG_ENV_IS_IN_MMC两个宏,其中 CONFIG_ENV_IS_IN_MMC是我们所需要的,而CONFIG_FSL_QSPI是我不需要的(我买的是IMX6ULL-MINI开发板,不知道你们需不需要)。所以要加上 #undef CONFIG_FSL_QSPI。注意这里千万不能使用 “//”单行注释,否则会报另一种错误,血的教训,哎。
接下来修改的地方,这里应该说可改可不改,我是迫于强迫症就改了,哈哈万恶的强迫症,浪费了我人生中珍贵的一两秒时间。

(注:下面是将 CONFIG_ENV_SIZE 这个宏挪到 #if defined(CONFIG_ENV_IS_IN_MMC) 下面去了)
#if defined(CONFIG_ENV_IS_IN_MMC)
#define CONFIG_ENV_SIZE                        SZ_8K        /* icode:环境变量大小,设置为8KB */
#define CONFIG_ENV_OFFSET                (12 * SZ_64K)        /* icode:环境变量偏移地址(相对于存储器的首地址):12 × 64KB */
#elif defined(CONFIG_ENV_IS_IN_SPI_FLASH)
#define CONFIG_ENV_OFFSET                (768 * 1024)        /* icode:环境变量偏移地址(相对于存储器的首地址):768 × 1024 */
#define CONFIG_ENV_SECT_SIZE                (64 * 1024)                /* icode:重新设置环境变量大小为64KB */
#define CONFIG_ENV_SPI_BUS                CONFIG_SF_DEFAULT_BUS
#define CONFIG_ENV_SPI_CS                CONFIG_SF_DEFAULT_CS
#define CONFIG_ENV_SPI_MODE                CONFIG_SF_DEFAULT_MODE
#define CONFIG_ENV_SPI_MAX_HZ                CONFIG_SF_DEFAULT_SPEED
#elif defined(CONFIG_ENV_IS_IN_NAND)
#undef CONFIG_ENV_SIZE
#define CONFIG_ENV_OFFSET                (60 << 20)                /* icode:环境变量偏移地址(相对于存储器的首地址):60 << 20 = 60MB */
#define CONFIG_ENV_SECT_SIZE                (128 << 10)
#define CONFIG_ENV_SIZE                        CONFIG_ENV_SECT_SIZE        /* icode:重新设置环境变量大小为128KB */
#endif





最后编译结果:
Image Type:   Freescale IMX Boot Image
Image Ver:    2 (i.MX53/6/7 compatible)
Mode:         DCD
Data Size:    409600 Bytes = 400.00 kB = 0.39 MB
Load Address: 877ff420
Entry Point:  87800000



一切正常,万事大吉,顺顺利利,可以继续努力搞Linux移植去了。(此处加一个狂笑)





最后补上一个自己的精简版的uboot移植流程:(偷偷抄袭原子哥的驱动开发指南的【偷笑】)

1、u-boot
1.1、u-boot移植
1.1.1、u-boot源码获取
       从NXP官方网站获取NXP官方开发板的u-boot,然后加以修改,使其适配自己的开发板。
1.1.2、u-boot编译
       ①、在u-boot顶层Makefile中添加下面两行语句
              ARCH=arm
  CROSS_COMPILE=arm-linux-gnueabihf-
       ②、编译命令
              makemx6ull_14x14_evk_emmc_defconfig
              makeV=1 -j8
1.1.3、u-boot下载测试
       ①、将u-boot烧写到SD卡的命令
              ../download.mxdownloadu-boot.bin /dev/sdb
       ②、在putty工具中查看u-boot打印的信息
       ③、
1.2、在u-boot中添加自己的开发板
1.2.1、创建config文件
       在uboot/configs目录下创建自己的开发板的config文件,命名为:mx6ull_alientek_emmc_defconfig。将NXP官方开发板的配置文件内容拷贝过来。官方文件名为:mx6ull_14x14_evk_emmc_defconfig。文件拷贝之后需要稍作修改才能使用。
1.2.2、创建开发板应用头文件
       在uboot/configs目录下创建开发板头文件,命名为:mx6ull_alientek_emmc.h。
然后将官方的头文件内容拷贝过来,官方的头文件名为:mx6ullevk.h。拷贝之后需要做些修改才能使用
1.2.3、创建开发板对应的板级文件夹
       ①、复制官方资料uboot/board/freescale/mx6ullevk文件夹,并在该目录下粘贴为mx6ull_alientek_emmc文件夹。
       ②、修改其中的mx6ullevk.c文件的名字为mx6ull_alientek_emmc.c
       ③、修改Makefile文件
       ④、修改imximage.cfg文件
       ⑤、修改Kconfig文件
       ⑥、修改MAINTAINERS文件
1.2.4、修改u-boot图形界面配置文件
       图形配置文件Kconfig位于:uboot/arch/arm/cpu/armv7/mx6/Kconfig
1.2.5、使用新添加的板子配置编译uboot
       编译命令:
       makedistclean
       makemx6ull_alientek_emmc_defconfig
       makeV=1 -j8






正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 16:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表