您的位置:首页 > 其它

ARM_s5pv210_porting_1

2015-12-13 19:40 274 查看
Linux系统移植

1.学习嵌入式课程的目的?

基于嵌入式硬件平台做程序开发,包括系统程序,应用程序

(1)基于裸板开发

没有操作系统支持,没有库,所有的代码,包括驱动和应用程序都是需要自己开发,实现相对简单的功能,可以,如果实现复杂系统,难度比较大。

(2)基于操作系统

操作系统为我们提供了大量的系统调用,使用大量的库,程序员只要知道如何使用,大大降低程序的开发难度。

接下来,需要做的就是开发板安装操作系统,使其将来支持基于操作系统开发的应用的运行。

Windows安装哪些内容?

(1)准备安装程序

(2)引导程序BIOS+Bootloader

(3)Windows操作系统内核(驱动程序)

(4)Windows文件系统(应用程序)

TPAD安装哪些内容?

(1)准备安装程序

我们可以再一些指定的官方网站上下载到标准版本的引导程序的源代码,Linux操作系统的源码,制作文件系统的软件包的源码。但是由于嵌入式硬件平台是非标准化,之间存在差异性,不能直接在硬件平台上运行,而是需要经过移植(修改)的过程。

把不能用的代码经过移植(修改)->与硬件匹配一致且能使用的代码

(2)引导程序 u-boot.bin

(3)操作内核 zImage

(4)文件系统 rootfs.cramfs

tarena#nand erase

tarena#tftp 20008000 uboot.bin

tarena#nand write 0x20008000 0 100000

tarena#tftp 20008000 zImage

tarena#nand write 0x20008000 500000 500000

tarena#tftp 20008000 rootfs.cramfs

tarena#nand write 20008000 a00000 1000000

移植课做什么?

1.基于移植前的代码经过移植(修改)成为可以用的代码。

——掌握移植的方法和原理

2.将移植后的代码生成可执行程序(u-boot.bin,zImage,rootfs.cramfs)烧写到开发板上。

——熟练操作

/[b]********************************************[/b]/

1.引导程序(BIOS+Bootloader)

Boot+loader

在操作系统运行之前运行的一段代码

(1)启动系统:Boot

初始化硬件设备,建立内存空间映射图,将系统的软硬件环境带到一个合适的状态。

tarena#

(2)Loader:

将操作系统的内核文件加载至内存,之后跳转到内核所在的内存地址运行。

2.操作系统内核(Linux)

www.kernel.org

Linux内核的本质:

(1)C语言:内核就是C函数集合。

(2)硬件:内核就是硬件资源的管理者。

(3)应用程序:内核是服务的提供者。

内核功能:

(1)系统调用:实现应用程序和内核之间的交互。

(2)进程管理:进程创建,终止,进程间通信,进程间调度

(3)内存管理

(4)设备驱动:

(5)虚拟文件系统

(6)平台相关代码

(7)网络协议

3.文件系统

应用程序和库

/[b]**********************************************[/b]/

Bootloader

uboot(源码:ftp://ftp.denx.de/pub/u-boot

uboot通用性:

1.支持多种架构的CPU:ARM,PowerPC,MIPS等

2.支持多种操作系统:Linux,Vxworks,QNX等

u-boot_CW210_1.3.4

u-boot.bin源码

移植uboot,分析源码,将u-boot源码:

(1)与硬件相关

(2)与硬件无关

1.与CPU相关的目录

cpu:包含和CPU架构相关的代码,u-boot支持的CPU在该目录下对应的一个子目录。

2.开发板相关的目录

board:包含和开发板相关的文件,每一个开发板都以一个目录出现在该目录下

3.driver各类具体设备的驱动,基本上可以通用

4.lib_arm支持ARM架构下的通用文件

5.include/configs/CW210.h(重要)

定义了大量宏定义

找到u-boot.bin的入口点

链接脚本:u-boot

配置编译:u-boot:

make CW210_config

编译u-boot,通过查看u-boot的编译过程,找到链接脚本

make



通过分析u-boot的编译过程,确定了

(1)链接脚本



(2)指定u-boot.bin的代码段的链接地址:0xC3e00000

接下来,u-boot.lds文件:









//自定义.u_boot_cmd段,目的是链接过程中,将命令结构体链接到该段中,便于命令的查找,执行命令的处理函数

接下来分析start.S

cpu/s5pv210/start.S

161 reset:

msr cpsr_c,#0xd3

321 bl lowlevel_init//底层硬件初始化

//定义在lowlevel_init.S文件,

关闭看门狗





初始化系统时钟

122 /init system clock/

123 bl system_clock_init

初始化SDRAM控制器

125 /Memory initialize/

126 bl mem_ctrl_asm_init

初始化串口控制器

129 /for UART/

130 bl uart_asm_init

初始化Nand Flash控制器

139 /simpli init for NAND/

140 bl nand_asm_init

搬移u-boot.bin到SDRAM,NandFlash,SDRAM可用

通过u-boot.bin代码实现搬移

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  arm