移植u-boot1.1.6到mini2440文档

2024-02-13 18:38
文章标签 文档 移植 mini2440 boot1.1

本文主要是介绍移植u-boot1.1.6到mini2440文档,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

u-boot移植:

移植是一个复杂的过程,其中的东西太多,最初应该以掌握思路、方法为主,能够编译通过,实现简单功能,在实践中慢慢积累经验,熟悉过程。

在PC上编译好U-Boot,生成Bin文件,将开发板与PC通过串口和USB口相连,把生成的Bin文件通过USB口下载到开发板上RAM里,从RAM里直接运行,查看串口是否按要求输出信息。熟悉u-boot移植的流程和基本设置,对于设计flash,网卡,usb等的移植在后面结合内核移植深入研究

    移植内容:LED,串口,时钟以及基本硬件初始化等内容

移植过程:

一.建立交叉编译环境

拷贝并解压arm-linux-gcc-3.4.1.tgz,

#tar xvzf arm-linux-gcc-3.4.1.tgz –C / 

建立工作目录 

#mkdir /home/u-boot1.1.6

运行命令,改变路径

#gedit /root/.bashrc

编辑/root/.bashrc文件最后一行

export PATH=$PATH:/usr/local/arm/3.4.1/bin

重启linux,然后测试编译环境是否建立

#arm-linux-gcc –v

二.在u-boot中建立自己的开发板类型,并测试编译

1.在U-Boot源码Board中找一款与目标开发板配置相近的文件夹,进入board目录,把smdk2410复制一份并命名为mini2440,进入mini2440目录,将里面的smdk2410.c改成mini2440.c,同时Makefile中也要作相应的更改。

2. 进入include/configs目录,将smdk2410.h复制一份并命名为mini2440.h。

3. 打开U-Boot根目录下的Makefile文件,搜索smdk2410,定位到smdk2410_config : unconfig处,对照该格式在下面加两行:

mini2440_config :      unconfig

@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x0

各项的意思如下:

arm: CPU的架构(ARCH)

arm920t: CPU的类型(CPU),其对应于cpu/arm920t子目录。

mini2440: 开发板的型号(BOARD),对应于board/mini2440目录。

Null: 开发者/或经销商(vender),直接在board目录下此处为NULL

s3c24x0: 片上系统(SOC)。

4.进入mini2440目录修改Makefie文件

COBJS := smdk2410.o flash.o为

COBJS := mini2440.o flash.o

5.测试编译

[root@localhost u-boot-1.1.6]# make mini2440_config

Configuring for mini2440 board...

[root@localhost u-boot-1.1.6]# make

测试通过完成第一步工作

三.修改u-boot文件,匹配mini2440

3.1 修改/cpu/arm920t/start.S

(1)启动代码的正式开始处,加上led驱动,使其能够显示u-boot进程

#define GPBCON                  0x56000010

#define GPBDAT                   0x56000014

#define GPBUP                     0x56000018

 

ldr                           r0, =GPBUP

ldr                           r1, =0x7FF

str                          r1, [r0]

 

ldr                           r0, =GPBCON

ldr                           r1, =0x154FF

str                          r1, [r0]

 

ldr                           r0, =GPBDAT

ldr                           r1, =0x000                  /*使其全部点亮四个led灯*/

str                          r1, [r0]

在以上向行代码分别定义了操作PB口的寄存器地址,关闭PB口上拉,设置PB5、6、7、8口为输出口(对应mini2440开发板上的4个LED),设PB5、PB6、7、8设为为低电平,对应LED亮。

(2) 关闭u-boot的RAM初始化功能

一般的Bootloader都有以下两个功能:上电首先初始化RAM;然后将自身复制到RAM中运行,提高运行速度。以上两点我们可以从start.S文件中start_code往下的两个宏看到:

#ifndef CONFIG_SKIP_LOWLEVEL_INIT

#ifndef CONFIG_SKIP_RELOCATE_UBOOT

我们直接通过现在Bootloader将U-Boot.bin文件下载到内存中运行,RAM初始化的动作已经由Supervivi做了,这里我们不需要再次进行初始化,而且如果进行初始化也会导致试验失败,因此一定要将LOWLEVEL_INIT功能关掉,你可以在这里把bl cpu_init_crit注释掉,也可以在include/configs/mini2440.h中增加一个宏定义:

#define CONFIG_SKIP_LOWLEVEL_INIT                     1

(3)修改寄存器地址

#if defined(CONFIG_S3C2400)

#define pWTCON        0x15300000

#define INTMSK        0x14400008    /* Interupt-Controller base addresses */

#define CLKDIVN    0x14800014    /* clock divisor register */

#else

#define pWTCON        0x53000000

#define INTMSK        0x4A000008    /* Interupt-Controller base addresses */

#define INTSUBMSK    0x4A00001C

#define CLKDIVN    0x4C000014     /* clock divisor register */

#endif

(4)修改中断部分

#if defined(CONFIG_S3C2410)

    ldr r1,=0x7ff /*根据2410芯片手册,INTSUBMSK有11位可用, vivi也是0x7ff,U-Boot一直没改过来。*/  

ldr r0,=INTSUBMS

str r1,[r0]

#endif

#if defined(CONFIG_S3C2440)

    ldr r1,=0x7fff /*根据2440芯片手册,INTSUBMSK有15位可用*/

    ldr r0,=INTSUBMSK

    str r1,[r0]

#endif

(5)修改时钟

#define MPLLCON                              0x4C000004

#define UPLLCON                               0x4C000008

 

ldr r0, =UPLLCON

ldr r1, =0x38022

str r1, [r0]

 

ldr r0, =MPLLCON

ldr r1, =0x7F021

str r1, [r0]

 

ldr r0, =CLKDIVN

mov r1, #5

str r1, [r0]

第一段代码定义了相关寄存器,CLKDIVN前面已有定义;第二段设置了USB时钟频率48MHz;第三段设置了系统的主频405MHz;第四段设置了分频系数,将主频降频分配给系统总线,等其它慢速设备使用

打开board//mini2440/mini2440.c,修改M_MDIV、

M_PDIV、M_SDIV等几个值,在这里主要就是修改宏定义,改成与前面在汇编文件中寄存器设置的参数一致即可,

#define M_MDIV       0x7f                        

#define M_PDIV  0x2

#define M_SDIV  0x1

//ldr r0, =MPLLCON

//ldr r1, =0x7F021(由此处设计上面数值)

(6)修改串口

修改cpu/arm920t/s3c24x0/speed.c中的频率计算函数。2440中FCLK的计算与2410有一定的区别,是原2410计算值的2倍,另外已知前面设置的分频参数是FCLK:HCLK:PCLK=1:4:8,直接把HCKL设为FCLK的1/4,代码修改如下:

ulong get_FCLK(void)

{

               ......

               p = ((r & 0x003F0) >> 4) + 2;

               s = r & 0x3;

 

              

    if (pllreg == MPLL)

               r = clk_power->MPLLCON;

               return((CONFIG_SYS_CLK_FREQ * m*2) / (p << s));

    else if (pllreg == UPLL)

               r = clk_power->UPLLCON;

               return((CONFIG_SYS_CLK_FREQ * m) / (p << s));

    else

               hang();   

}

 

ulong get_HCLK(void)

{

    S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();

 

    return((clk_power->CLKDIVN & 0x2) ? get_FCLK()/4 : get_FCLK());

}

(7)在文件中添加“CONFIG_S3C2440”,使得原来s3c2410的代码可以编译进来。

U-Boot里有些驱动根据处理的型号的不同,配置的方法、参数各不相同,那么就是通过这个CONFIG_XXXXX来定义区分的。由于S3C2410和S3C2440的寄存器地址和参数设置基本是相同的,所以只需在定义CONFIG_S3C2410的地方加上CONFIG_S3C2440即可,CONFIG_MINI2440同理;如果处理器差异较大,那么在具体地置你就要根据该处的功能需要编写相应的驱动代码。

 

 

在u-boot根目录下运用命令寻找带有”CONFIG_S3C2410”的文件然后在后面加上||defined(CONFIG_S3C2440)

[root@localhost u-boot-1.1.6]# grep 'CONFIG_S3C2410' * -R

然后依次进行修改

特别注意:

/cpu/arm920t/s3c24x0/interrupts.c文件的181行,加上红字部分

#elif defined(CONFIG_SBC2410X) || \

      defined(CONFIG_SMDK2410) || \

      defined(CONFIG_VCMA9)||defined(CONFIG_mini2440)

四:修改完毕后,进行编译

[root@localhost u-boot-1.1.6]# make

编译生成uboot.bin,现在运行

Uboot的基本流程已经基本熟悉,后面可以根据需要进行flash,网卡等相关移植。  

                                                                                           by 麦田

                                                                                         2009.6.25         

本文主要参考以下两位博友文章,表示感谢

http://www.stars625.com/portinguboottomini2440step1.html  

http://blog.chinaunix.net/u1/34474/showart_487416.html            

这篇关于移植u-boot1.1.6到mini2440文档的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

Python脚本:TXT文档行数统计

count = 0 #计数变量file_dirs = input('请输入您要统计的文件根路径:')filename = open(file_dirs,'r') #以只读方式打开文件file_contents = filename.read() #读取文档内容到file_contentsfor file_content in file_contents:

bcolz文档

原文:http://bcolz.blosc.org/en/latest/reference.html First level variables bcolz.__version__'''bcolz包的版本。''' bcolz.dask_here'''是否检测到dask的最低版本。''' bcolz.min_dask_version'''需要dask的最低版本(dask是可选

WordPress开发中常用的工具或api文档

http://php.net/ http://httpd.apache.org/ https://wordpress.org/ https://cn.wordpress.org/ https://core.svn.wordpress.org/ zh-cn:开发者文档: https://codex.wordpress.org/zh-cn:%E5%BC%80%E5%8F%91%E8%80%

Python知识点:使用Python进行PDF文档处理

使用 Python 进行 PDF 文档处理可以通过多种库来实现,包括 PyPDF2、pdfplumber、reportlab、pdfminer 等。这些库可以处理不同的 PDF 任务,例如 提取文本、拆分合并 PDF、修改 PDF、生成 PDF 等。以下是几种常见操作及对应的库和代码示例。 1. 安装常用库 首先,安装常用的 PDF 处理库: pip install PyPDF2 pdfpl

【2025】基于Python的空气质量综合分析系统的设计与实现(源码+文档+调试+答疑)

博主介绍:     ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W+粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优质作者。通过长期分享和实战指导,我致力于帮助更多学生完成毕业项目和技术提升。 技术范围:     我熟悉的技术领域涵盖SpringBoot、Vue、SSM、HLMT

自动化表格处理的革命:智能文档系统技术解析

在当今数据驱动的商业环境中,表格数据的自动化处理成为了企业提高效率、降低成本的关键。企业智能文档系统在智能表格识别方面展现出卓越的性能,通过精准识别和处理各种通用表格,显著提升了企业文档管理的智能化水平。本文将深入探讨该系统在表格识别方面的关键技术和应用优势,以及如何通过行业定制化服务满足不同行业的需求。 1. 通用表格识别 智能文档系统通过先进的OCR技术和表格结构识别算法,能够精准

MongoDB学习—(4)文档的插入,删除与更新

一,文档的插入 插入命令有两个一个为insert,另一个为save,两者的区别为 db.[documentName].insert({..})插入的数据不允许重复,即_id不可相同 db.[docuemntName].save({..})插入的数据允许重复,如果整条数据内容相同,则不发生替换,如果数据有做不同,则将原数据替换 二,删除文档数据 db.[docuementName].r