ok6410 u-boot-2012.04.01移植七完善u-boot移植(u-boot移植结束)

2024-05-09 04:48

本文主要是介绍ok6410 u-boot-2012.04.01移植七完善u-boot移植(u-boot移植结束),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

继ok6410 u-boot-2012.04.01移植六后,开发板已支持MLC NAND、DM9000等。但还需要完善比如环境变量、mtdpart分区、裁剪、制作补丁等。下面的工作就是完善移植的u-boot。

开发环境:
系统:ubuntu 10.04.4
单板:ok6410
NAND FLASH:K9GAG08U0D 2048MB MLC
DDR:K4X1G163PCX2 256MB
NET:DM9000AEP
编译器:arm-linux-gcc-4.3.2
搭建开发环境详见ubuntu 10.04.4开发环境配置。
目标:
1.板级初始化,支持单板ok6410
2.修改u-boot,支持NAND启动
3.增加菜单update功能
4.增加MLC NAND支持
5.支持DM9000,网卡下载程序
6.修改环境变量以及mtdpart分区
7.u-boot裁剪及制作补丁

一、修改环境变量

根据u-boot启动界面输出的using default environment,找到common/enc_common.c,还可以通过save命令找到env_nand.c,就不进一步分析了,直接修改代码。修改smdk6410.h

#define CONFIG_SYS_MALLOC_LEN  (CONFIG_ENV_SIZE + 512*1024)

#define CONFIG_ENV_IS_IN_NAND
#define CONFIG_ENV_SIZE   0x80000//0x4000 /* Total Size of Environment Sector */
#define CONFIG_ENV_OFFSET  0x80000
#define CONFIG_ENV_RANGE  CONFIG_ENV_SIZE

接着编译测试

SMDK6410 # set bootdelay 5
SMDK6410 # save
Saving Environment to NAND...
Erasing Nand...

nand0: MTD Erase failure: -22

Writing to Nand... done
SMDK6410 # reset

重启发现没有保存,看来还有问题,根据提示继续修改

change@change:/si/OK6410/u-boot-2012.04.01$ grep "MTD Erase failure" * -nR
Binary file drivers/mtd/nand/libnand.o matches
drivers/mtd/nand/nand_util.c:149:                       printf("\n%s: MTD Erase failure: %d\n",

ok,去drivers/mtd/nand/nand_util.c:149

  result = meminfo->erase(meminfo, &erase);
  if (result != 0) {
   printf("\n%s: MTD Erase failure: %d\n",
          mtd_device, result);
   continue;
  }

没看出啥问题,那还是从save命令分析saveenv()是在common/env_nand.c中实现的,进去看看,加了很多打印语句还是没找到。后来在头文件include/asm-generic/errno.h找到#define EINVAL  22 /* Invalid argument */原来failure: -22是参数问题。输的u-boot命令肯定没问题。没办法只好到配置文件smdk6410.h找问题。仔细看了一遍还真找到了,原来#define CONFIG_ENV_OFFSET  0x40000没有改成#define CONFIG_ENV_OFFSET  0x80000。因为K9GAG08U0D的BLOCK SIZE是512K。下面测试

SMDK6410 # set bootdelay 5
SMDK6410 # save
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x80000 -- 100% complete.
Writing to Nand... done
SMDK6410 # reset
resetting ...


U-Boot 2012.04.01 (Jul 09 2013 - 21:30:25) for SMDK6400


CPU:     S3C6400@532MHz
         Fclk = 532MHz, Hclk = 133MHz, Pclk = 66MHz (ASYNC Mode)
Board:   SMDK6400
DRAM:  128 MiB
WARNING: Caches not enabled
Flash: 0 KB
NAND:  select s3c_nand_oob_mlc_64
NAND_ECC_NONE selected by board driver. This is not recommended !!
2048 MiB
In:    serial
Out:   serial
Err:   serial
Net:   dm9000
Hit any key to stop autoboot:  0

##### Update menu for ok6410 #####
[g] get file, and write to nand flash 0 block
[b] Boot the system
[r] Reset the u-boot
[q] Quit from menu
Enter your selection: q
SMDK6410 #

重启发现bootdelay变为5,正常了。

二、修改mtdpart分区
这个比较简单,仿照别人做法,直接在配置文件smdk6410.h增加如下:

/*-----------------------------------------------------------------------
 * Dynamic MTD partition support
 */
#define CONFIG_CMD_MTDPARTS
#define CONFIG_MTD_DEVICE               /* needed for mtdparts commands */
//#define CONFIG_FLASH_CFI_MTD
#define MTDIDS_DEFAULT          "nand0=OK6410-0"

#define MTDPARTS_DEFAULT        "mtdparts=OK6410-0:512k(u-boot),"      \
                                                 "512k(params),"            \
                                                 "4M(kernel),"        \
                                                 "-(rootfs)"        
 添加后编译在测试

SMDK6410 # mtdparts default
SMDK6410 # mtdparts


device nand0 <OK6410-0>, # parts = 4
 #: name                size            offset          mask_flags
 0: u-boot              0x00080000      0x00000000      0
 1: params              0x00080000      0x00080000      0
 2: kernel              0x00400000      0x00100000      0
 3: rootfs              0x7fb00000      0x00500000      0


active partition: nand0,0 - (u-boot) 0x00080000 @ 0x00000000


defaults:
mtdids  : nand0=OK6410-0
mtdparts: mtdparts=OK6410-0:512k(u-boot),512k(params),4M(kernel),-(rootfs)
SMDK6410 # 

 测试基本正常。下面制作补丁。

三、整个移植代码修改量比较大,这里制作一个补丁文件,大家直接打个补丁就可以用了。

change@change:/si/OK6410/u-boot-2012.04.01$ make distclean
change@change:/si/OK6410/u-boot-2012.04.01$ cd ..
change@change:/si/OK6410$ mv u-boot-2012.04.01 u-boot-2012.04.01_ok
change@change:/si/OK6410$ tar xjf u-boot-2012.04.01.tar.bz2 
change@change:/si/OK6410$ diff -urN u-boot-2012.04.01 u-boot-2012.04.01_ok > u-boot-2012.04.01_ok6410.patch
change@change:/si/OK6410$ 

生成补丁文件u-boot-2012.04.01_ok6410.patch,不想做繁琐的修改,打个上面的补丁文件就OK了。打补丁方法如下:

change@change:/si/OK6410/u-boot-2012.04.01$ patch -p1 < ../u-boot-2012.04.01_ok6410.patch 
patching file arch/arm/config.mk
patching file arch/arm/cpu/arm1176/start.S
patching file arch/arm/include/asm/arch-s3c64xx/s3c6400.h
patching file arch/arm/lib/board.c
patching file board/samsung/smdk6410/config.mk
patching file board/samsung/smdk6410/.gitignore
patching file board/samsung/smdk6410/init.c
patching file board/samsung/smdk6410/lowlevel_init.S
patching file board/samsung/smdk6410/Makefile
patching file board/samsung/smdk6410/sdram.c
patching file board/samsung/smdk6410/smdk6400_nand_spl.c
patching file board/samsung/smdk6410/smdk6410.c
patching file board/samsung/smdk6410/u-boot-nand.lds
patching file common/cmd_menu.c
patching file common/env_nand.c
patching file common/main.c
patching file common/Makefile
patching file drivers/mtd/nand/nand_base.c
patching file drivers/mtd/nand/s3c64xx.c
patching file include/common.h
patching file include/configs/smdk6410.h
patching file include/linux/mtd/mtd-abi.h
patching file Makefile
change@change:/si/OK6410/u-boot-2012.04.01$ make
System not configured - see README
make: *** [all] Error 1
change@change:/si/OK6410/u-boot-2012.04.01$ make smdk6410_config 


warning: Please migrate to boards.cfg.  Failure to do so will
         mean removal of your board in the next release.


Configuring for smdk6410 board...
change@change:/si/OK6410/u-boot-2012.04.01$ make

编译ok就可以用了。想偷懒可以这样做,最简单。但不建议,自己亲自移植一遍更能学到东西。至此ok6410 u-boot-2012.04.01移植部分告一段落,下一篇linux移植。

这篇关于ok6410 u-boot-2012.04.01移植七完善u-boot移植(u-boot移植结束)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/972433

相关文章

Spring Boot 整合 SSE(Server-Sent Events)实战案例(全网最全)

《SpringBoot整合SSE(Server-SentEvents)实战案例(全网最全)》本文通过实战案例讲解SpringBoot整合SSE技术,涵盖实现原理、代码配置、异常处理及前端交互,... 目录Spring Boot 整合 SSE(Server-Sent Events)1、简述SSE与其他技术的对

MyBatis-Plus 与 Spring Boot 集成原理实战示例

《MyBatis-Plus与SpringBoot集成原理实战示例》MyBatis-Plus通过自动配置与核心组件集成SpringBoot实现零配置,提供分页、逻辑删除等插件化功能,增强MyBa... 目录 一、MyBATis-Plus 简介 二、集成方式(Spring Boot)1. 引入依赖 三、核心机制

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理

在 Spring Boot 中连接 MySQL 数据库的详细步骤

《在SpringBoot中连接MySQL数据库的详细步骤》本文介绍了SpringBoot连接MySQL数据库的流程,添加依赖、配置连接信息、创建实体类与仓库接口,通过自动配置实现数据库操作,... 目录一、添加依赖二、配置数据库连接三、创建实体类四、创建仓库接口五、创建服务类六、创建控制器七、运行应用程序八

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

解决Failed to get nested archive for entry BOOT-INF/lib/xxx.jar问题

《解决FailedtogetnestedarchiveforentryBOOT-INF/lib/xxx.jar问题》解决BOOT-INF/lib/xxx.jar替换异常需确保路径正确:解... 目录Failed to get nested archive for entry BOOT-INF/lib/xxx

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick