| |
采用u-boot作为系统的bootloader,
layout-grid-align: none" align=left>u-boot是德国DENX小组的开发用于多种嵌入式cpu的bootloader程序, u-boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。u-boot除了支持PowerPC系列的处理器外,还能支持mips、 x86、arm、NIOS、XScale等诸多常用系列的处理器。
u-boot的启动过程
1 启动流程
我们一般把bootloader都分为阶段1(stage1)和阶段2(stage2)两大部分,依赖于CPU体系结构的代码(如CPU初始化代码等)通常都放在阶段1中且通常用汇编语言实现,而阶段2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。
1 阶段1,汇编代码,对于s3c2410是cpu/arm920t/start.s文件。
主要流程如下:
设置CPU的模式为SVC模式
关闭看门狗
禁掉所有中断
设置以CPU的频率
把自己拷贝到RAM
配置内存区控制寄存器
配置的栈空间
进入C代码部分
2 阶段2是C语言代码,在lib_arm/board.c中的start_armboot是C语言开始的函数,也是整个启动代码中C语言的主函数。这个函数调用一系列的初始化函数,然后进入主UBOOT命令行,进入命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。
当用户输入启动linux的命令的时候,u-boot会将 kernel 映像(zImage)和从 nand flash 上读到 RAM 空间中,为内核设置启动参数,调用内核,从而启动linux。
U-BOOT常用命令介绍
printenv 打印环境变量
setenv 设置环境变量
如:setenv ipaddr 172.22.60.44
Setenv serverip 172.22.60.88
saveenv 保存设定的环境变量
我们经常要设置的环境变量有ipaddr,serverip,bootcmd,bootargs。
tftp 即将内核镜像文件从PC中下载到SDRAM的指定地址,然后通过bootm来引导内核,前提是所用PC要安装设置tftp服务。
如: tftp 30008000 zImage
nand erase 擦除nand flash中数据块
如:nand erase 0x40000 0x1c0000
起始地址 大小
nand write 把RAM中的数据写到Nand Flash中
如:nand write 0x30008000 0x40000 0x1c0000
nand read 从nand flash中读取数据到RAM
如:nand read 0x30008000 0x40000 0x1c0000
go 直接跳转到可执行文件的入口地址,执行可执行文件。
下载并烧写内核如下
1 用网线连接开发板和PC机
2 启动U-BOOT并设置环境变量
setenv ipaddr 172.22.60.32 //设置开发板的IP
setenv serverip 172.22.60.99 //设置PC机的IP
setenv ethaddr 11.22.33.44.55.66 //设置开发板的物理地址
saveenv //保存
3 在PC机端打开TFTP服务器,并且把要下载的文件拷贝到tftp服务器程序所在的目录下
4 下载和烧写
在u-boot下用以下命令
tftp 30008000 zImage
nand erase 40000 1c0000
nand write 30008000 40000 1c0000
linux 2.6内核的移植实验
概述:
对于嵌入式linux系统来说,有各种体系结构的处理器和硬件平台,用户根据自己的需要定制的硬件平台,只要是硬件平台有一点点变化,就需要做一些移植工作,linux内核移植是嵌入式linux系统中最常见的一项工作。
由于linux内核具备可移植性的特点,并且已经支持了很多种目标板,这样,用户很容易从中找到跟自己硬件平台类似的目标板,参考内核已经支持的目标板来进行移植工作。
linux-2.6内核已经支持S3C2410处理器的多种硬件板,我们可以参考SMDK2410参考板来移植开发板的内核。
实验步骤:
(1)准备工作
(2)修改顶层Makefile
(3)添加分区
(4)添加devfs
(5)配置编译内核
一、准备工作
建立工作目录,下载源码,安装交叉工具链,步骤如下。
mkdir /root/build_kernel
cd /root/build_kernel
wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux2.6.14.1.tar.bz2
tar jxvf linux2.6.14.1.tar.bz2
export PATH=/usr/local/arm/3.3.2/bin:$PATH
二、修改顶层Makefile
修改内核目录树根下的的Makefile,指明体系结构是arm,交叉编译工具是arm-linux-。
vi Makefile
找到ARCH和CROSS_COMPILE,修改
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
保存退出。
三、设置flash分区
此处一共要修改3个文件,分别是:
arch/arm/mach-s3c2410/devs.c ;指明分区信息
arch/arm/mach-s3c2410/mach-smdk2410.c ;指定启动时初始化
drivers/mtd/nand/s3c2410.c ;禁止Flash ECC校验
3.1指明分区信息
在arch/arm/mach-s3c2410/devs.c文件中:
vi arch/arm/mach-s3c2410/devs.c
在arch/arm/mach-s3c2410/devs.c文件添加的内容包括:
(1)添加包含头文件。
(2)建立nand flash分区表。
(3)假如分区信息
(4)建立Nand Flash芯片支持
(5)加入Nand Flash芯片支持到Nand Flash驱动
(1)添加包含头文件。
#include <linux/mtd/partitions.h>
#include <linux/mtd/nand.h>
#include <asm/arch/nand.h>
...
VOD视频点播系统(三)