详细讲解 移植Uboot到ARM9开发系统上

ARM启动过程之Uboot两个阶段具体工作(以S5PV210为例) 1,S5PV210的启动过程 (1)iROM:iROM(价格最贵)在0地址处,与CPU总线式连接,上电就会执行,和norflash类似。210启动时会首先执行内部的固件代码,三星公司出厂前内置的代码段,称为BL0。BL0部分包括对SD卡、Nandflash等SOC内部硬件进行初始化并判断系统启动方式,找到外部用来启动系统的存储器,并将存储器中的启动代码(Bootloader)拷贝到SRAM中。 ... 阅读详情

首先了解ARMer9开发系统硬件设计上和三星原装SMDK2410之间的区别。让uboot在ARMer9开发系统上跑起来,目前只需要关注如下的硬件区别,解决了下面这个问题,uboot就可以在ARMer9开发系统上正常地从串口输出,进入提示符。很多命令都可以使用,当然有些命令需要做修改。

 

SMDK2410 : nor Flash 是AMD的1M的;

ARMer9: 是Intel E28F128J3A, 两片并联,一共32M Bytes.

 

下载一个uboot-1.1.1.tar.bz2.;

 

tar jxvf uboot-1.1.1.tar.bz2;

 

在uboot 目录board/smdk2410 下的flash.c需要修改。这个是Flash的驱动,如何写,需要参考E28F128J3A的Datasheet. 这里我们提供一个我们修改好的flash.c文件,您只需要将这个文件覆盖掉board/smdk2410 下的文件即可。

 

(注意:你要安装了交叉编译器才行哦)

 

修改uboot目录下的Makefile,将

ifeq ($(ARCH),arm)

CROSS_COMPILE = arm-Linux-

endif

 

修改成

 

ifeq ($(ARCH),arm)

CROSS_COMPILE = /opt/host/armv4l/bin/armv4l-unknown-linux-

endif

 

修改processor.h中:

union debug_insn

{

u32 arm;

u16 thumb;

}

修改成:

union debug_insn

{

u32 arm_mode;

u16 thumb_mode;

}

 

然后配置板子

make smdk2410_config

 

然后

make

 

在uboot目录生成uboot.bin;

 

通过sjf2410w程序将uboot.bin下载到nor flash中, 地址为0的地方;

 

串口接在UART0上,uboot的启动信息将输出。

 

你将发现很多命令都可以使用了。uboot果然强大。

 

关于网络部分,因为ARMer9开发系统使用也是CS8900A,所以代码部分几乎不用做改动,只需要在 include/configs/smdk2410.h中看看,有没有定义CONFIG_ETHADDR,CONFIG_IPADDR, CONFIG_SERVERIP这些宏没有,如果没有,请定义好。

 

 

 

#define CONFIG_ETHADDR 00:00:e0:ff:cd:15

 

#define CONFIG_IPADDR 192.168.0.5

 

#define CONFIG_SERVERIP 192.168.0.100

 

就这样修改一下,网络部分功能就通了,哈哈。

 

可以使用tftpboot命令从tftp服务器下载程序到系统内存中。

 

#tftpboot 0x33000000 zImage

 

#bootm 0x33000000

 

 

利用uboot引导可执行映象的通用方法

 

 

 

uboot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件。

 

mkimage在制作映象文件的时候,是在原来的可执行映象文件的前面加上一个0x40字节的头,记录参数所指定的信息,这样uboot才能识别这个映象是针对哪个CPU体系结构的,哪个OS的,哪种类型,加载内存中的哪个位置, 入口点在内存的那个位置以及映象名是什么

 

root@Glym:/tftpboot# ./mkimage

Usage: ./mkimage -l image

-l ==> list image header information

./mkimage -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image

-A ==> set architecture to 'arch'

-O ==> set operating system to 'os'

-T ==> set image type to 'type'

-C ==> set compression type 'comp'

-a ==> set load address to 'addr' (hex)

-e ==> set entry point to 'ep' (hex)

-n ==> set image name to 'name'

-d ==> use image data from 'datafile'

-x ==> set XIP (execute in place)

参数说明:

 

-A 指定CPU的体系结构:

 

取值 表示的体系结构

alpha Alpha

arm A RM

x86 Intel x86

ia64 IA64

mips MIPS

mips64 MIPS 64 Bit

ppc PowerPC

s390 IBM S390

sh SuperH

sparc SPARC

sparc64 SPARC 64 Bit

m68k MC68000

 

-O 指定操作系统类型,可以取以下值:

openbsd、netbsd、FreeBSD、4_4bsd、linux、svr4、esix、Solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、artos

 

-T 指定映象类型,可以取以下值:

standalone、kernel、ramdisk、multi、firmware、script、filesystem

 

-C 指定映象压缩方式,可以取以下值:

none 不压缩

gzip 用gzip的压缩方式

bzip2 用bzip2的压缩方式

 

-a 指定映象在内存中的加载地址,映象下载到内存中时,要按照用mkimage制作映象时,这个参数所指定的地址值来下载

 

-e 指定映象运行的入口点地址,这个地址就是-a参数指定的值加上0x40(因为前面有个mkimage添加的0x40个字节的头)

 

-n 指定映象名

 

-d 指定制作映象的源文件

 

常用U-BOOT命令介绍

1. ?或者help,得到所有命令列表;

2. help: help usb, 列出USB功能的使用说明

3. ping:注:通常只能运行uboot的系统PING别的机器

4. setenv: 设置环境变量

setenv serverip 10.36.20.49,设置TFTP Server的IP地址;

setenv ipaddr 10.36.20.200,设置IP地址;

setenv bootcmd ‘tftp 32000000 vmlinux; kgo 32000000’,设置启动命令(实际上就是一个脚本);

5. saveenv:在设置好环境变量以后, 保存环境变量值到flash中间;

6. tftpboot:tftpboot 0x800000 vmlinux, 将TFTP Server(IP = 环境变量中设置的serverip)中/tftpdroot目录 下的vmlinux通过TFTP协议下载到物理内存0x800000开始的地方。

7. kgo:启动没有压缩的linux内核,kgo 0x800000

8. bootm:启动通过UBOOT TOOLS—— mkimage制作的压缩LINUX内核, bootm 3200000;

9 flinfo:列出flash的信息

10. protect: 对FLASH进行写保护或取消写保护, protect on 1:0-3(就是对第一块FLASH的0-3扇区进行保护),protect off 1:0-3取消写保护

11. erase: 删除FLASH的扇区, erase 1:0-2(就是对每一块FLASH的0-2扇区进行删除)

12. cp: 将内存中数据烧写到Flash, cp 0x800000 0xc0000 0x40000(把内存中0x800000开始的0x40000字节复制到0xc0000处);

13. mw: 对RAM中的内容进行写操作, mw 32000000 ff 10000(把内存0x32000000开始的0x10000字节设为0xFF);

14. md: 显示RAM中的内容, md 0x800000;

15. loadb: 准备用 KERMIT协议接收来自kermit或超级终端传送的文件。

16. nfs: nfs 32000000 192.168.0.2:aa.txt , 把192.168.0.2(LINUX 的NFS文件系统)中的NFS文件系统中的aa.txt 读入内存0x32000000处。

17. fatls:列出Dos FAT文件系统, 如:fatls usb 0列出第一块U盘中的文件

18. fatload: 读入FAT中的一个文件,如:fatload usb 0:0 32000000 aa.txt

19. usb相关的命令:

usb start: 起动usb 功能

usb info: 列出设备

usb scan: 扫描usb storage(u 盘)设备

 

Uboot对SMDK2410板的NAND Flash初始化部分没有写,

 

 

 

即lib_arm/board.c中的start_armboot函数中有这么一句:

#if (CONFIG_COMMANDS 

 

linux内核编译问题

1 内核编译命令

 

编译非压缩内核: make Image  

编译压缩内核:   make zImage  

编译可被u-boot支持的内核: make uImage
最后生成的内核都在 $(src_tree)/arch/arm/boot目录下

 

2 make uImage

 

需要使用u-boot提供的mkimage工具,把这个文件拷贝到/usr/bin或/bin目录下

,否则会有“mkimage找不到”的错误。

 

makeimage软件内部使用了mmap()函数,这个函数对NTFS文件系统中的文件操作时会失败(使用的是Fedora Core 7,不知道别的linux版本是否也一样),显示“不能映射文件”错误。所以最好不要在NTFS文件系统上构建内核,或者把内核编译过程中生成的zImage拷贝到非NTFS文件系统上,再调用mkimage处理。

 

一个比较好的解决方案是修改$(src_tree)/arch/arm/boot/Makefile中产生uImage的部分:

 

$(obj)/uImage: $(obj)/zImage FORCE

    $(call if_changed,uimage)

    @echo '  Image $@ is ready'

 

方法一:使用Image

# Method 1 : Image->gzip->add  u-boot header

$(obj)/uImage: /tftpboot/u9260.img

/tftpboot/u9260.img:    $(obj)/Image FORCE

    cat  $<  | gzip -9  > $(obj)/Image.gz

    mkimage  -A arm  -O linux  -T kernel  -C gzip -a $(LOADADDR) -e $(LOADADDR) /

             -n 'Linux-$(KERNELRELEASE)' -d $(obj)/Image.gz  $@

    rm -f  $(obj)/Image.gz

    @echo '  Image $@ is ready'

 

方法二:使用zImage  

# Method 2 : zImage->add u-boot header

$(obj)/uImage:  /tftpboot/u9260.img

/tftpboot/u9260.img:    $(obj)/zImage FORCE

    $(call if_changed,uimage)

    @echo '  Image $@ is ready'

 

3  EABI

使用AT91SAM9260EK的缺省配置编译内核,制作根文件系统,下载到AT9260单板,启动过程中出现“kernel panic: not syncing attempted to kill init”信息,然后死机。

经检查发现,ramdisk挂载正常,很可能是busybox执行失败。

 

怀疑是共享库的问题,将busybox静态编译链接,故障依旧。

换用一个老版本的根文件系统映象,可以正常启动。

 

后来上网搜索了一些相关信息,找到了解决问题的途径。 原因在于:编译内核和busybox使用的编译器是arm-linux-gcc 4.3.2,而这个编译器默认是打开“EABI选项”的,这样编译出来的busybox就是EABI的。但是内核编译的时候,默认是把“EABI选项”关掉的。所以busybox和内核无法正常配合。把“EABI选项”打开,重新编译内核后,一切正常。

详细uboot移植(GEC210开发板) uboot移植是一个挺麻烦的过程,很多初学者都对此感到一头雾水,本文以GEC210开发板为例来介绍一下uboot移植过程。首先介绍一下什么是移植。 一、概念和条件 将别人发布的源码做修改(针对自己的开发平台),然后让这段代码在自己的平台上运行。 移植的目标是GEC210ARM开发板,移植的源码是samsung公司的smdkv210开发板的源码。  移植的条件:移植的源码所支持的cpu要 阅读详情

相关推荐

Uboot开发移植笔记(超详细代码讲解)(一)

本文对UBoot源码进行详细讲解,逐一带你从0修改UBoot源码进行移植工作

qq_46037552的博客 1万+

arm9_uboot_分析源码

第一阶段: 1.硬件设备初始化:将CPU设为SVC模式,关闭开门狗,设置时钟,关闭MMU,Cache(在u-boot-1.1.6/cpu/arm920t/start.s中定义) 2.准备ram:设置存储控制器(在u-boot-1.1.6/board/100ask24x0/lowlevel.s中实现) #include <config.h> #inclu...

weixin_30519071的博客 353

移植uboot2010.06到TQ2440开发板详解之一

最近在学习uboot移植,也看过很多文章,但多多少少都有些不尽人意的地方,自己手动移植也出现过种种问题。尤其是不能对移植的过程有很好的理解,基于这个原因,我打算深入学习一下uboot移植过程,并对移植过程详细记录,方便那些想学习uboot移植确找不到门路的新手。         鉴于本人也是新手,文章难免有疏漏之处,也有自己不是很明白的地方,已经标记出来,还望各位多多指教。如果觉得好想转载,

山顶一棵松 4197

uboot 移植全过程---基于ARM9 2410

uboot@localhost ~]#mkdir -p dev_home/uboot [uboot@localhost ~]#cd dev_home/uboot 从下面地址下载u-boot 的源代码。 http://sourceforge.net/projects/u-boot [uboot@localhost uboot]#tar -xjvf u-boot-1.1

学无止境 7409

ARM9开发板初体验----使用Uboot通过USB下载线烧写bin文件

Uboot 1.将uboot烧写的Nor flash 中 2.Nor flash 启动,uboot运行 3.使用uboot的USB下载功能,PC–(传文件)–&gt;给开发板 4.uboot收到文件再烧到nand flash 5.此时设为nand flash启动 重新上电 运行bin文件 两条USB线,其中一条是USB串口,一条是u-boot所实现的USB设备 只有dnw软件中的US...

qq_35298990的博客 1699

uboot 引导arm9 平台

<br />2011-03-07<br />15:06:36<br /> <br />uboot 引导开机启动顺序,uboot 为1.3.2 以三星920T (CPU) smdk2410 开发板为例。<br /> <br />/* 中断设置 */<br />.globl _start  系统复位位置<br />_start: b       start_code  各个异常向量对应的跳转代码 0x0<br /> ldr pc, _undefined_instruction  未定义的指令异常 0x4<br

able_zhou的专栏 910

uboot移植----以Exynos 4412(Cortex-A9)为例

前言:当在公司做开发时,拿到一个裸板, 上边无BootLoader, 无操作系统内核。我们首先需要做的事情是:根据板子信息(SOC、Arch、CPU、Vendor、board、参考板等),移植Uboot,继而移植linux内核。下面是以Cortex-A9为例,uboot移植的具体步骤。  1、确定开发板信息 目的:嵌入式的系统移植就是移植BootLoader、linux内核、根文件系统。针对...

雅痞萌叔的博客 4389

ARM uboot移植3 -从 uboot 官方标准uboot开始移植

一、选择合适的官方原版 uboot 1、官方原版 uboot 的版本 (1) 版本号。刚开始是 1.3.4 样式,后来变成 2009.08 样式。 (2) 新版和旧版的差别。uboot 的架构很早就定下来了,然后里面普遍公用的东西(common 目录下、drivers 目录下、fs 目录下等···)在各个版本之间几乎是完全一样的。 差别最大的是 board 和 cpu 目录,这两个目录正是单板(开发板)相关的。越新的 uboot 版本支持越多的开发板(CPU),所以越新的 uboot 越庞大。 (3) 并不

weixin_42109053的博客 2440

Linux系统Uboot移植

我们在启动一个Linux系统时,就是按照以上的顺序来依次启动。系统先运行bootload。这段bootloader程序会初始化DDR等外设(虽然I.MUX6ULL的DDR初始化是由内核的内部bootroom完成的),然后将Linux kernel的程序拷贝到内存(DDR)中执行,然后启动内核

m0_56806782的博客 1113

华清FS4412开发板的UBOOT移植指南

UBOOT是一个流行的开源引导加载程序,用于ARM、X86、 MIPS等多种架构的嵌入式设备。它在系统启动时最先运行,负责初始化硬件设备、建立内存空间映射等关键任务,为操作系统的启动创造必要的条件。华清FS4412开发板使用的是三星的Exynos 4412处理器,基于ARM Cortex-A9微架构设计,支持多核处理能力。该处理器集成了四核ARM Cortex-A9 CPU核心,其主频高达1.4GHz,每核心可独立运行,提供了强大的计算性能。

weixin_33562004的博客 1055

ARMuboot引导系统制作和linux系统移植

本文章将详细介绍在一个裸板(ARM板)上移植并配置一个linux系统,其中包含uboot引导系统的制作与移植以及liunx的制作移植。博主用的是三星Exynos4412芯片和FS4412_CoreBoard_V2核心板,具体的其他板子会有差异。相关资料链接:链接:https://pan.baidu.com/s/1uv_N-8dQlZli4Bc2xfPbRg提取码:xs66。

qq_60640693的博客 1381

大话uboot 移植

1. arm soc 的启动方式 2. uboot 源码的基本结构 3. 如何移植 4. uboot 环境变量 5. uboot 启动 boot_args & boot_command 6. uboot 源码分析

Qing的专栏 2062

正点原子IMX6ULL-ALPHA开发移植uboot2023.04

说实话,移植uboot真的没有必要整最新版的,因为uboot的作用就是来启动linux,能用就行了。我就是最求最新版,导致我仅仅在学习移植uboot的时候就花费了我一个星期的时间,我也尝试过移植uboot官网上的uboot,但是不能成功驱动LCD屏幕,最终放弃,去移植官方的uboot。更改步骤比较无聊,基本上就是把evk换成alpha,把14x14_evk换成alpha,小写换小写,大写换大写。网上关于这些信息为什么要更改的原因已经讲的十分详细了,所以我在这里并不详细介绍每个步骤是为什么。

A_salted_fisher的博客 2794

tiny4412 uboot 2018移植(一)移植前准备

简介 本文使用的开发板是友善之臂提供的tiny4412 SDK板。它的bootloader是由E4412_N.bl1.bin(三星提供的),uboot-spl.bin,uboot.bin和E4412_tzsw.bin组合而成,它可以通过sd卡启动也可以通过emmc启动,但是我这里只讲解emmc启动的方式,因为这样操作比较简洁,不用去拔插sd卡到电脑进行烧录。 先来看下芯片内部的memory map...

我将带头加班的博客 3047

ARM9的OpenWRT系统移植以及 无线视觉操控系统的软件开发

最近做了一个基于ARM9的智能小车无线视觉操控系统,顺便也把具体的实现步骤写下来,希望对有兴趣于智能模式识别技术有兴趣的童鞋们有所帮助。 1        构建ARM下位机的OpenWRT系统   1.1      配置开发环境 以Ubuntu11.04为例,首先安装好编译所需要的开发环境。 打开一个终端,执行以下命令: #sudoapt-getinstallbuild-ess

Talent_vincent的专栏 6279

嵌入式系统移植教程教学实践报告(基于arm-fs4412开发板)附代码手册

​ 嵌入式系统移植是指将一个操作系统从一种硬件平台移植到另一种硬件平台的过程。它涉及将操作系统内核和相关的软件和驱动程序适配到目标硬件上,以使其能够在目标硬件平台上正确运行并提供所需的功能。 ​

qq_74931014的博客 1828

uboot移植

一、我们知道uboot就是一个Bootloader。但是,arm不像我们的pc机一样,用一个老毛桃随便找一个网站下一个windows镜像就可以直接装了。 我们的uboot对应的就是老毛桃里面刷的引导程序。 虽然uboo支持很多架构很多不同的厂家的板子,但是UBOOT它不具备通用性。 跟我们的电脑不一样,电脑无论是华为的,小米的,华硕的老毛桃刷的底层引导程序都i是一样的。 所以uboot移植是要跟做手术一样对一些东西进行一些裁剪和配置。让uboot适配我们板子。 下面我们说一下移植的步骤。 1)首先肯定要去下

wzf_Cql 1559

linux系统移植篇(二)—— Uboot使用介绍

linux系列目录: linux基础篇(一)——GCC和Makefile编译过程 linux基础篇(二)——静态和动态链接 ARM裸机篇(一)——i.MX6ULL启动过程 ARM裸机篇(二)——i.MX6ULL第一个裸机程序 ARM裸机篇(三)——重定位和地址无关码 ARM裸机篇(四)——异常和中断 linux系统移植篇(一)—— linux启动过程 linux系统移植篇(二)—— Uboot移植 文章目录一、Uboot介绍二、uboot烧录与启动1. 获取uboot2. uboot目录结构3. uboot

sinat_31039061的博客 1万+
上一篇: U-BOOT全线移植
下一篇: linux内核启动过程——基于S3C2410
林伟
博客等级 码龄17年 602粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值