Uboot移植

1、架构

board:与一些开发板相关的配置文件

common:uboot下使用能够使用的命令

CPU:与特定CPU架构相关的目录

disk:对磁盘的支持

doc:文档目录

drivers:uboot支持的设备驱动程序放置的地方,比如:网卡、Flash、串口和USB等。

fs:支持的文件系统

include:uboot使用的头文件

lib_xxx:与架构有关的库文件

net:与网络协议栈有关的代码

tools:用于生成uboot的工具

2、启动

启动过程:

  • 系统复位进入u-boot stage1入口点(start.S)包括定义入口、设置异常向量、设置CPU的模式和频率、配置内存区控制寄存器、安装uboot的栈空间、关闭看门狗等。
  • 硬件设备的初始化(lib_arm/board.c  start_armboot  C语言入口)
  1. 调用一系列的初始化函数

指定初始函数表

配置可用的Flash区flash_init()

初始化内存分配函数mem_malloc_init()

nand flash初始化nand_init()

初始化环境变量env_relocate()

外围设备初始化devices_init()

I2C总线初始化i2c_init()

LCD初始化drv_lcd_init()

VIDEO初始化drv_video_init()

键盘初始化drv_keyboard_init()

系统初始化drv_system_init()

2、初始化网络设备

设置IP地址gd->bd->bi_ip_addr=getenv_IPaddr(“ipaddr”)

设置mac地址

进入命令循环,接受用户从串口输入的命令for(;;)main_loop();

  • 为加载uboot stage2准备ram空间
  • 设置好堆栈
  • 挑战到stage2的C入口
  • 初始化本阶段要用用到的设备
  • 检查内存映射
  • 将kernel映像和文件映像从flash中读到ram中
  • 为内核设定启动参数
  • 调用内核

3、驱动移植

移植的过程:

  • 在宿主机上建立交叉编译开发环境
  • 修改cpu/armxx目录下的文件内容,主要包括cpu.S,start.S,interrupts.c,seria1.c,speed.c等文件
  • 在board目录下创建自己的开发板目录beaglebone,在目录中创建beaglebone.c,flash.c,memsetup.S,Makefile,u-boot.lds,config.mk文件
  • 在include/configs目录下创建beaglebone.h
  • 打开u-boot目录下Makefile文件,加入两行:
  • beaglebone_config: unconfig
  • @./mkconfig $(@:_config=) arm am335x  beaglebone
  • 编译,运行:
  • make beaglebone_config
  • make
  • 烧写

4、移植要修改的文件大总结

Makefile,include下目标板.h,board目录下的目标板.c文件,flash.c, uboot.lds链接文件, cpu目录下的驱动文件

修改:

  • cpu/armv7目录下start.S启动代码
  • board/beaglebone

beaglebone.c文件,主要是SDRAM的驱动程序,完成SDRAM的UPM表设置,上电初始化

flash.c   Flash的驱动程序在此

mumsetup.S文件

config.mk文件:用于设置程序链接的起始地址

u-boot.lds文件

  • include/configs目录下beaglebone.h文件    beaglebone开发板头文件,寄存器参数设置

额外记录

uboot移植:首先在想对应的配置头文件中打开或添加想对应的宏定义支持,再在板极初始化(第二阶段初始化过程中)代码中添加需要支持功能的初始化函数。

注:如果初始化函数对应的板版本不兼容或者不存在的话,得自己编写。

书籍记录:

从庖丁解牛说uboot如何编译

uboot移植的更多相关文章

  1. u-boot移植 II

    下面是韦老师的uboot移植攻略: A. 开发板的相关拷贝与修改 1. 在board文件夹下面, 将原来的smdk2410复制为100ask24x0目录, 并将smdk2410.c改名为100ask2 ...

  2. 基于mini2440的uboot移植(一)

    一.移植环境 虚拟机:ubuntu12.04 uboot源码:u-boot-2008.10.tar.bz2 交叉编译:arm-linux-gcc-4.4.3 简单的记录下编译uboot的过程,要想具体 ...

  3. u-boot移植总结(四)u-boot-2010.09框架分析

    (一)本次移植是基于FL2440,板子的基本硬件: CPU 型号为S3C2440,基于ARM920T,指令集ARMV4,时钟主频400MHz SDRAM H57V2562GTR-75C 2片*32MB ...

  4. 【转】uboot移植(一)BootLoader基本概念

    原文网址:http://blog.chinaunix.net/uid-25445243-id-3869348.html 一.BootLoader简介1.1.嵌入式Linux软件结构与分布 在一般情况下 ...

  5. U-BOOT 移植到友善之臂mini2440

    U-BOOT 移植到友善之臂mini2440 开发环境:ubuntu 10.10 编译器:友善之臂mini2440光盘自带arm-linux-gcc 4.4.3 一. 在denx官网下载源码,我所用版 ...

  6. X-007 FriendlyARM tiny4412 u-boot移植之内存初始化

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  7. X-004 FriendlyARM tiny4412 uboot移植之点亮指路灯

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  8. X-003 FriendlyARM tiny4412 uboot移植之添加相应目录文件

    X-003 FriendlyARM tiny4412 uboot移植之添加相应目录文件 <<<<<<<<<<<<<< ...

  9. tiny4412 --Uboot移植(5) DDR3内存

    开发环境:win10 64位 + VMware12 + Ubuntu14.04 32位 工具链:linaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-g ...

  10. uboot移植阶段二--3串口终结篇

    2011-03-20 23:00:37 前天U-boot移植串口后,能成功显示数据. 今天的主要目的是再次进行U-boot移植.看是否成功.花了40分钟,很顺利. 接着就是要把之前有问题的U-boot ...

随机推荐

  1. Cocos2d-x项目创建方式

    刚接触cocos2d-x的时候,还只有2.x版本,尝试着将cocos2d-x项目创建功能加入到vs里面去,后来,引擎用Python封装好了好多个脚本文件,其中就包括create_project.py文 ...

  2. [转帖]以Windows服务方式运行.NET Core程序

    以Windows服务方式运行.NET Core程序 原作者blog:https://www.cnblogs.com/guogangj/p/10093102.html 里面使用了NSSM 工具 但是自己 ...

  3. wps word改多级编号为2.1

    右键标题1, 修改样式 编号 多级编号 标题1 2 3 右键标题2 修改样式 选择格式-编号 选择多级编号-标题1 2 3 直接点确定,OK. ---------------------------- ...

  4. os模块+sys模块+random模块+shutil模块

    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cdos.curdir ...

  5. pandas缺失值处理

    1.检查缺失值 为了更容易地检测缺失值(以及跨越不同的数组dtype),Pandas提供了isnull()和notnull()函数,它们也是Series和DataFrame对象的方法 - 示例1 im ...

  6. 利用可变参数打印log2

    #pragma once #include <string> #include "StdAfx.h" #include <Windows.h> using ...

  7. Django-website 程序案例系列-12 CSRF

    django为用户实现防止跨站请求伪造的功能 需要配置settings.py:  django.middleware.csrf.CsrfViewMiddleware 1. form表单提交 <f ...

  8. poj2115-C Looooops -线性同余方程

    线性同余方程的模板题.和青蛙的约会一样. #include <cstdio> #include <cstring> #define LL long long using nam ...

  9. File类总结

    1.File类是描述文件或文件夹的.File类可以用来操作文件或文件夹本身.但它不能操作文件中的数据. File( String name  )  把一个字符串封装成File对象.这个字符串可以是文件 ...

  10. [hgoi#2019/3/10]赛后总结

    关于本次hg模拟赛,题目来源于CF1110. t1-无意义运算符(meaning) 题目描述 最大公约数和位运算之间有共同点吗?是时候来研究一下了. 给定一个正整数a,请找到一个闭区间[1,a-1] ...