嵌入式Linux实验手册
基于ARM9 S3C2410 实验平台
1. 实验概述... 1
2. 实验环境配置... 1
2.1 开发主机配置... 1
2.2 实验板介绍... 1
2.3 实验板配置准备... 4
3. Linux预备知识... 5
3.1 Linux常用命令... 5
3.2 Makefile的使用常识... 8
3.3 嵌入式Linux系统引导过程... 12
3.4 U-boot启动过程... 13
3.5 Linux内核启动过程... 22
4. 实验内容... 31
4.1 建立交叉开发环境... 31
4.2 编译调试应用程序... 34
4.3 移植u-boot 36
4.4 编译Linux内核... 39
4.5 移植Linux内核... 47
4.6 调试Linux内核... 50
4.7 制作Linux文件系统... 52
4.8 部署Linux系统... 55
1. 实验概述
对于嵌入式系统,目标板一般只有很小的存储空间,处理器频率也很低。而且没有可以预装的Linux系统,直接在这样的硬件上建立Linux系统非常困难。嵌入式Linux交叉开发环境可以很好地解决这个难题。
所谓交叉开发,就是在开发主机上编辑编译源程序,在目标板上运行可执行程序。通常通过以太网接口传输Linux内核影像到目标板内存,让目标板的Linux挂接NFS的文件系统。这样的交叉开发环境可以非常方便地进行嵌入式Linux开发调试以及集成。
本实验以S3C2410 ARM920T处理器的实验板为例,建立嵌入式Linux交叉开发环境,完成嵌入式Linux开发的全过程。
通过本实验,可以掌握嵌入式Linux基本开发流程,熟悉u-boot、Linux内核、应用程序以及Linux文件系统的配置开发。从而能够在具体的工程项目中应用嵌入式Linux系统。
2. 实验环境配置
2.1 开发主机配置
建议开发主机硬件配置高一些,这样编译的速度快一些,尤其是编译Linux内核。
推荐使用X86 PC配置:
主频:>1GHz
内存:>256MB
安装Redhat Linux 9操作系统作为开发环境。可以在PC上安装Windows和Linux双操作系统,也可以在Windows安装vmware。
安装过程中,建议完全安装所有软件包,这样可以使用Redhat Linux提供的一些Linux工具和服务,方便开发。如果磁盘存储空间有限,安装过程可以附加选择一些软件包,或者Linux启动后再安装这些rpm包。
这些软件包包括:tftp, tftp-server等。
在开发时所需其他服务,请参考手册试验部分4.1内容:建立交叉开发环境。
实验板的硬件特点:
- SAMSUNG ARM9 S3C2410处理器,主频可达203MHz。
- 64MB SDRAM,有2片K4S561632构成,工作在32位模式
- 2MB NOR FLASH,型号为SST39VF1601,工作在16位模式
- 64MB NAND FLASH,型号为K9F1208,可以兼容16MB、32MB和128MB
- 通过跳线可以设置系统从NOR FLASH或者NAND FLASH启动。
- 10M以太网接口,采用CS8900Q3芯片,带传输和连接状态指示灯
- LCD和触摸屏接口。
- 二个USB HOST接口,遵守USB1.1标准。
- 一个USB Device接口,遵守USB1.1标准
- Audio音频接口:音频模块由S3C2410的IIS音频总线和UDA1341音频编解码器组成,板上带一个麦克。
- 2路RS232接口,波特率可达115200bps。
- RTC接3V锂电池供电
- SD卡接口,兼容SD Memory Card 1.0和SDIO Card Protocol 1.0
- I2C接口的EEPROM:可通过CPU的I2C接口实现对EEROM中的数据读写,数据掉电不丢失。
- 提供国际标准20针ICE JTAG接口,提供配套的Flash编程下载线。
- 16个按键
- 蜂鸣器,4个LED
- 开关电源
2.3 实验板配置准备
- 实验板与开发主机之间连接串口线,以太网线和JTAG接口线。
表2.3.1 连线接口说明
连接线
实验板
开发主机
串口线
UART1
串口
以太网线
10M网口
网口
JTAG电缆线
JTAG接口
并口
注意:切勿带电拔插JTAG电缆和并口线,否则很容易损坏芯片。
核心板上的跳线JP1:连接短路线插,设置为NAND FLASH启动; 断开短路插,设置为NOR FLASH启动。
注意:断开短路插时,要把短路插子插在一个脚上,不要取下,防止丢失。
使用sjf2410.exe程序把FS2410_BIOS_I.bin烧写到FLASH中:
1) 复制“Flash烧写工具”目录到主机上,双击“安装驱动.exe”,安装GIVEIO驱动。
2) 连接JTAG接口和并口线。20针扁平电缆连接JTAG接口和JTAG小板的JP3,并口连接主机和JTAG小板。确认核心板上的JP1调线断开。
3) 进入“Flash烧写工具”目录,双击执行sjf2410_bios.bat,显示烧写提示信息
4) 根据烧写提示信息,选择3:SST39VF160 Prog,再输入Input target offset: 0,开始烧写通过并口烧写到NOR FLASH
5)烧写完成后,复位即可启动BIOS
具体参考光盘提供的FS2410用户手册和烧写文档:
2.3节 FS2410的BIOS功能说明
2.6节 用SJF2410工具将BIOS烧写到NAND FLASH
2.7节 用SJF2410工具将BIOS烧写到NOR FLASH
FLASH烧写说明文档_sjf2410_v4.pdf
通过BIOS烧写u-boot.bin到NOR FLASH。
目标板上电,BIOS启动,在DNW显示启动信息并提示命令选项。
通过串口下载影像文件,选择1: Uart download file,输入1,显示等待串口接收传输文件。
打开DNW的Serial Port菜单,选择发送文件:Tx file
在对话框中浏览选择u-boot.bin的文件,确认后,开始传输,下载到目标板的SDRAM中缓存。
传输完成,提示是否立刻执行,输入n,不立刻执行
然后,回到显示命令选项,选择5: Write NOR FLASH with download file,SDRAM中内容就自动烧写到NOR FLASH的0地址了。
烧写完成后,复位实验板,串口终端应该显示出现u-boot的启动信息。
本课程要求学员对Linux基本操作命令有一定了解和掌握。下面列出的一些常用命令作为参考。最好针对每一个都能亲自练习、掌握。
----------------------------------------------------------------------
ls 以默认方式显示当前目录文件列表
ls –a 显示所有文件包括隐藏文件
ls –l 显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行
----------------------------------------------------------------------
cd dir 切换到当前目录下的dir目录
cd .. 切换到到上一级目录
cd ~ 切换到用户目录,比如是root用户,则切换到/root下
----------------------------------------------------------------------
rm file 删除某一个文件
rm -rf dir 删除当前目录下叫dir的整个目录
----------------------------------------------------------------------
cp source target 将文件source 复制为 target
cp –av soure_dir target_dir 将整个目录复制,两目录完全一样
cp –fr source_dir target_dir 将整个目录复制,并且是以非链接方式复制,当source目录带有符号链接时,两个目录不相同
----------------------------------------------------------------------
mv source target 将文件或者目录source更名为target
----------------------------------------------------------------------
diff dir1 dir2 比较目录1与目录2的文件列表是否相同,但不比较文件的实际内容,不同则列出
diff file1 file2 比较文件1与文件2的内容是否相同,如果是文本格式的文件,则将不相同的内容显示,如果是二进制代码则只表示两个文件是不同的
----------------------------------------------------------------------
echo message 显示一串字符
cat file 显示文件的内容,和DOS的type相同
cat file | more 显示文件的内容并传输到more程序实现分页显示,使用命令less file可实现相同的功能
more 分页命令,一般通过管道将内容传给它,如ls | more
----------------------------------------------------------------------
eject umout掉CDROM并将光碟弹出,但cdrom不能处于busy的状态,否则无效
----------------------------------------------------------------------
du 计算当前目录的容量
du -sm /root 计算/root目录的容量并以M为单位
find -name /path file 在/path目录下查找看是否有文件file
grep -ir “chars” 在当前目录的所有文件查找字串chars,并忽略大小写,-i为大小写,-r为下一级目录
----------------------------------------------------------------------
vi file 编辑文件file
vi原基本使用及命令:
vi分为编辑状态和命令状态。输入命令要先按ESC,退出编辑状态, 然后输入命令。
常用命令有:
:x(退出)
:x!(退出不保存)
:w(保存文件)
:w!(不询问方式写入文件)
:r file(读文件file)
:%s/oldchars/newchars/g(将所有字串oldchars换成newchars)
i进入编辑插入状态
ESC退出编辑状态
----------------------------------------------------------------------
man ls 读取关于ls命令的帮助
----------------------------------------------------------------------
reboot 重新启动计算机
halt 关闭计算机
init 0 关闭所有应用程序和服务,进入纯净的操作环境
init 1 重新启动应用及服务
init 6 重新启动计算机
----------------------------------------------------------------------
tar xfzv file.tgz 将文件file.tgz解压
tar -zcvf file.tgz