Linux系统移植.docx
- 文档编号:9028280
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:66
- 大小:38.40KB
Linux系统移植.docx
《Linux系统移植.docx》由会员分享,可在线阅读,更多相关《Linux系统移植.docx(66页珍藏版)》请在冰点文库上搜索。
Linux系统移植
Linux系统移植
Linux系统移植
序
该文档的目的是总结我们在工作中的一些经验,并把它们分享给喜欢
ARM和Linux的朋友,如有错误
之处,请大家多多指点.同样,我们也希望更多人能把自己的工作经验和体会加入该文档,让大家共同进步.
该文档是一份交流性文档,只供个人学习与交流,不允许公司和企业用于商业行为.
第一部分前言
1硬件环境
1.1主机硬件环境
开发机:
Pentium-4CPU
内存:
512MB
硬盘:
60GB
1.2目标板硬件环境
CPU:
S3C2410
SDRAM:
HY57V561620
Nandflash:
K9F1208U0B(64MB)
以太网芯片:
CS8900A(10M/100MB)
1.3工具介绍
仿真器:
Dragon-ICE
电缆:
串口线,并口线
2软件环境
2.1主机软件环境
2.1.1Windows操作系统
ADS编译工具:
ADS1.2
仿真器软件:
Dragon-ICEdaemon程序
2.1.2Linux操作系统
GNU交叉编译工具:
2.95.3:
作用:
编译u-boot
3.3.2,3.4.4:
作用:
编译内核和应用程序
其它工作:
tree工具:
作用:
查看文件目录树
下载:
从
ftp:
//mama.indstate.edu/linux/tree/下载编译
2.1.3目标板最后运行的环境
启动程序:
u-boot-1.1.4
内核:
linux-2.6.14.1
应用程序:
1.busybox-1.1.3
2.TinyLogin-1.4
3.Thttpd-2.25
2.2Linux下工作用户及环境
2.2.1交叉工具的安装
工具链的编译过程请参考第三部分.
1.下载交叉工具
2.95.3下载地址:
ftp:
//ftp.arm.linux.org.uk/pub/armlinux/toolchain/cross2.95.3.
tar.bz2
3.3.4下载地址:
2.编译交叉工具
[root@localhost~]mkdir/usr/local/arm
[root@localhost~]cd/usr/local/arm
把cross-2.95.2.tar.bz2,cross-3.4.4.tar.gz拷贝到/usr/local/arm目录中。
解压这两个包。
[root@localhost~]tar-xjvfcross-2.95.2.tar.bz2
[root@localhost~]tar-xzvfcross-3.4.4.tar.gz
2.2.2u-boot移植工作目录
1.添加工作用户
[root@localhost~]#useradd-Groot-groot-d/home/ubootuboot
2.建立工作目录
[uboot@localhost~]$mkdirdev_home
[uboot@localhost~]$cddev_home
[uboot@localhostdev_home]$mkdirdocmybootloaderuboot
.
|--doc
|--mybootloader
`--uboot
3.建立环境变量
[uboot@localhost~]vi~/.bashrc
exportPATH=/usr/local/arm/2.95.3/bin:
$PATH
2.2.3内核及应用程序移植工作
1.添加工作用户
[root@localhost~]#useradd-Groot-groot-d/home/armarm
2.建立工作目录
[arm@localhostarm]$mkdirdev_home
[arm@localhostarm]$cddev_home
[arm@localhostarm]$mkdirbootldrbtoolsdebugdocimageskernellocalapps\
rootfssysappstmptools
[arm@localhostarm]$tree-L1
.
|--bootldr
|--btools
|--debug
|--doc
|--images
|--kernel
|--localapps
|--rootfs
|--sysapps
|--tmp
`--tools
可以看到如上树形结构。
注:
tree命令
3.建立环境变量设置脚本
[arm@localhostarm]$vienv_sh
#!
/bin/bash
PRJROOT=~/dev_home
KERNEL=$PRJROOT/kernel
ROOTFS=$PRJROOT/rootfs
LAPP=$PRJROOT/localapps
DOC=$PRJROOT/doc
TMP=$PRJROOT/tmp
exportPRJROOTKERNELLAPPROOTFS
exportPATH=/usr/local/arm/3.4.4/bin:
$PATH
4.登陆时启动环境变量
[arm@localhostarm]$vi~/.bashrc
.~/dev_home/env_sh
重新登陆
arm用户,环境变量生效
[arm@localhostarm]$suarm
2.3配置系统服务
2.3.1tftp服务器的配置
如果用下面一条命令能够看到服务已经启动,则不用安装,否则需要按
1或
2点安装tftp-server服务器.
[arm@localhostarm]#netstat-a|greptftp
udp00*:
tftp*:
*
1.从
RPM包安装tftp-server
从对应Linux操作系统版本的安装光盘上找到tftp-server的安装包.
下面
tftp-server-0.32-4.i386.rpm包为例,把rpm包拷贝到dev_home/btools/下.
[arm@localhostarm]#cptftp-server-0.32-4.i386.rpm/home/arm/dev_home/btools/
[arm@localhostarm]#suroot
[root@localhostarm]#rpm-qtftp-server
如果没有安装tftp-server,就要用下面命令安装,否则,直接进入第2步配置服务.
[root@localhostarm]#cd/home/arm/dev_home/btools/
[root@localhostbtools]#rpm-ivhtftp-server-0.32-4.i386.rpm
建立tftp的主工作目录
[root@localhostbtools]#mkdir/tftpboot
2.修改配置文件并启动服务
备份配置文件
[root@localhostbtools]#if[-f/etc/xinetd.d/tftp]
>then
>cp/etc/xinetd.d/tftp/etc/xinetd.d/tftp.old
>fi
修改配置文件
[root@localhostbtools]#vi/etc/xinetd.d/tftp
servicetftp
{
disable=no
socket_type=dgram
protocol=udp
wait=yes
user=root
server=/usr/sbin/in.tftpd
server_args=-s/tftpboot
per_source=11
cps=1002
flags=IPv4
}
检查
tftp服务是否打开
[root@localhostbtools]#chkconfig--list
如果
tftp的服务没有打开,则用下面命令打开tftp服务开关
[root@localhostbtools]#chkconfigtftpon
重启服务
#/etc/init.d/xinetdrestart
#netstat-a|greptftp
udp00*:
tftp*:
*
2.3.2NFS服务器的配置
1.安装NFS服务器
[root@localhostbtools]#rpm-qnfs-utils
如果没有安装,从对应Linux操作系统版本的安装光盘上找到nfs-utils的安装包.Fedora5中的安装包
名称为nfs-utils-1.0.8.rc2-4.FC5.2.i386.rpm。
下面以该安装包为例说明:
[root@localhostbtools]#rpm-ivhnfs-utils-1.0.8.rc2-4.FC5.2.i386.rpm
2.配置NFS服务器
[root@localhostbtools]#vi/etc/exports
#加入要允许被另外计算机mount的目录:
#/home/arm/dev_home/tmp为被另外计算机mount的目录
#192.168.1.134允许另外计算机mount的IP
#rw,sync,no_root_squash表示访问限制,更详细说明见相关手册.
/home/arm/dev_home/tmp192.168.1.134(rw,sync,no_root_squash)
3.启动NFS服务器
第一启动NFS服务器时用下面命令.
[root@localhostbtools]#/etc/init.d/nfsstart
如果你已经启动了
NFS服务器时,并且重新修改了/etc/exports文件,用如下命令使新加入的目录生效:
[root@localhostbtools]#/etc/init.d/nfsreload
4.测试NFS服务器
[root@localhostbtools]#netstat-a|grepnfs
5.显示被
export出的目录列表
[root@localhostbtools]#exportfs
2.4工具使用
2.4.1minicom的使用
1.切换到root用户.
[root@localhostbtools]#su2.
查找有效的串设备.
[root@localhost~]#cat/proc/devices
...
4ttyS
...
188ttyUSB
...
如果是普通串口设备,设备名前缀为ttyS,第一串口为ttyS0,第二串口为ttyS1,依次类推.
如果是
USB转串口的设备,设备名前缀为ttyUSB,第一串口为ttyUSB0.
3.配置ttyUSB设备
[root@localhost~]#minicom-sttyUSB0
会出现一个configuration窗口,
┌──[configuration]────┐
│
Filenamesandpaths│
│
Filetransferprotocols│
│
Serialportsetup│
│
Modemanddialing│
│
Screenandkeyboard│
│
SavesetupasttyUSB0│
│
Savesetupas..│
│
Exit│
│
ExitfromMinicom│
└───────────────┘
选择Serialportsetup配置.会出现如下窗口:
┌────────────────────────────────────────────┐
│
A-SerialDevice:
/dev/ttyUSB0│
│
B-LockfileLocation:
/var/lock│
│
C-CallinProgram:
│
│
D-CalloutProgram:
│
│
E-Bps/Par/Bits:
1152008N1│
│
F-HardwareFlowControl:
No│
│
G-SoftwareFlowControl:
No│
││
│
Changewhichsetting?
│
└───────────────────────────────────────────┘
我的设置如上所示,设置完成后,Changewhichsetting?
项上按回车退出当前窗口,回到第一个窗口.按
Save
setupasttyUSB0保存设置.再按
ExitfromMinicom退出
Minicom.
4.启动minicom
[root@localhost~]#minicom
3作者介绍
3.1策划,组织,指导,发布者
刘勇
email:
littlegenius2008@
如果您有新的内容,请发到这个电子邮件,我们会把您的内容加入文档,并在作者列表中加入您的名字.
3.2ADSbootloader部分
作者:
刘勇
email:
littlegenius2008@
3.3交叉工具部分
作者:
孙贺
email:
msunhe@
3.4uboot部分
作者:
聂强
email:
wolfwind9779@
作者:
孙贺
email:
msunhe@
3.5内核部分
作者:
聂大鹏
email:
dozec@
作者:
牛须乐(8900a网卡移植部分)
email:
clizniu@
3.6应用程序部分
作者:
聂大鹏
email:
dozec@
3.7NandFlash驱动部分
作者:
孙磊,刘勇
email:
sunlei3448@
第部分系统启动bootloader的编写(ADS)
1工具介绍
1.1ADS命令行命令介绍
1.1.1armasm
1.命令:
armasm[选项]-o目标文件源文件
2.选项说明
-Errors错误文件名
;指定一个错误输出文件
-I目录[,目录];指定源文件搜索目录
-PreDefine预定义宏
;指定预定义的宏
-NOCache;编译源代码时禁止使用Cache进行优化
-MaxCache
-NOWarn;关闭所有的警告信息
-G;输出调试表
-keep;在目标文件中保存本地符号表
-LIttleend;生成小端(Little-endian)ARM代码
-BIgend;生成大端(Big-endian)ARM代码
-CPU
arm920t.
-16;建立16位的thumb指令.
-32;建立32位的ARM指令.
3.编译一个汇编文件
c:
\adsloader>armasm-LIttleend-cpuARM920T-32bdinit.s
把汇编语言编译成小端,32位,ARM920TCPU.
1.1.2armcc,armcpp
1.命令:
armcc[选项]源文件1源文件2...源文件n
2.选项说明
-c;编译但是不连接
-D;指定一个编译时使用的预定义宏常量
-E;仅仅对
C源文件做预处理
-g;产生调试信息表
-I;指头文件的搜索路径
-o
-O[0/1/2];指定源代码的优化级别
-S;输出汇编代码来代替目标文件
-CPU
arm920t.
3.编译一个C程序
c:
\adsloader>armcc-c-O1-cpuARM920Tbdisr.c
编译不连接,二级优化,ARM920TCPU.
1.1.3armlink
1.命令:
armlink[选项]输入文件
2.选项说明
-partial;合并目标文件
-Output文件;指定输出文件名
-scatter文件;按照指定的文件为可执行文件建立内存映射
-ro-base地址值
;只读代码段的起始地址
-rw-base地址值
;RW/ZI段的起始地址
3.把多个目标文件合并成一个目标文件
c:
\adsloader>armlink-partialbdmain.obdport.obdserial.obdmmu.obdisr.o-o
bd.o
4.把几个目标文件编译一个可执地文件
c:
\adsloader>armlinkbd.obdinit.o-scatterbdscf.scf-obd.axf
1.1.4fromelf
1.命令:
fromelf[选项]输入文件
2.选项说明
-bin二进制文件名
;产生的二进制文件
-elfelf文件名
;产生一个elf文件
-texttext文件名
;产生text文件
3.产生一个可执行的二进制代码
c:
\adsloader>fromelf.bd.axf.bin.o.bd.
bin
2基本原理
2.1可执行文件组成及内存映射
2.1.1可执行文件的组成
在ADS下,可执行文件有两种,一种是.axf文件,带有调试信息,可供AXD调试工具使用.另一种是.bin
文件,可执行的二进制代码文件。
我们重点是讲描.bin文件的组成。
我们把可执行文件分为两种情况:
分别为存放态和运行态。
1.存放态
存放态是指可执行文件通过fromelf产生后,在存储介质(flash或磁盘)上的分布.此时可执行文件一
般由两部分组成:
分别是代码段和数据段。
代码段又分为可执行代码段(.text)和只读数据段(.rodata),
数据段又分为初始化数据段(.data)和未初始化数据段(.bss)。
可执行文件的存放态如下:
+-------------+----------|
.bss|
+-------------+--数据段
|.data|
+-------------+----------|
.rodata|
|_____________|代码段
|.text|
+-------------+----------
2.运行态
可执行文件通过装载过程,搬入到RAM中运行,这时候可执行文件就变成运行态。
在ADS下对可执行代
码各段有另一个名称:
|...|
+-------------+----------|
.bss|ZI段
+-------------+--数据段
|.data|RW段
+-------------+----------|
.rodata|
|_____________|代码段(RO段)
|.text|
+-------------+----------|
...|
装载前
当可执行文件装载后,在RAM中的分布如下:
|...|
+-------------+--ZI段结束地址
|ZI段|
+-------------+--ZI段起始地址
|保留区2|
+-------------+--RW段结束地址
|RW段|
+-------------+--RW段起始地址
|保留区1|
+-------------+--RO段结束地址
|RO段|
+-------------+--RO段起始地址
|...|
装载后
所以装载过程必须完成把执行文件的各个段从存储介质上搬到RAM指定的位置。
而这个装载过程由谁来完
成呢?
由我们的启动程序来完成.
2.1.2装载过程
在ADS中,可以通过两种方式来指定可执行代码各段在RAM中的位置,一个是用armlink来指定,一种是
用scatter文件来指定.RAM区的起始地址:
0x30000000.
1.armlink指定代码段地址
我们通常的代码,只用指定两个段开始地址,RO段的起始地址和RW段的起始地址,ZI段紧接在RW段之
后.示例见该部分的1.1.3.
2.scatter指定代码段地址
我们也可以通过scatter文件指定可执行文件各段的详细地址.Scatter文件如下:
MYLOADER.0x30000000
;MYLOADER:
为可执行文件的名称,.可自定义
;0x3000000:
起始地址
{
RO.0x30000000
;RO只读代码段的名称
;0x30000000:
只读代码段的起始地址
{
init.o.(Init,.+First)
.....;.Init代码段为可执行文件的第一部分.
*.(+RO).;所有其它的代码段和只读数据段放在该部分
}
RW.+0
;RW:
.RW段的名称
;+0:
表示
RW段紧接着
RO段
{
*.(+RW).;所有RW段放在该部分
}
ZI..+0
;ZI:
.ZI段的名称
;+0:
表示
ZI段紧接着
RW段
{
*(+ZI).;所有ZI段放在该部分
}
}
3..ADS产生的各代码段宏
|Image$$RO$$Base|./*.RO代码段起始地址*/
|Image$$RO$$Limit|./*.RO代码段结束地址*/
|Image$$RW$$Base|./*.RW代码段起始地址*/
|Image$$RW$$Limit|./*.RW代码段结束地址*/
|Image$$ZI$$Base|./*.ZI代码段起始地址*/
|Image$$ZI$$Limit|./*.ZI代码段结束地址*/
注意:
在两个$$之间的名称,.与scatter中指定的段的名称相同..
4..装载过程说明
当从
NorFlash启动时,.要把flash芯片的首地址映射到0x00000000位置,.系统启动后,.启动程序本身把自己从
flash中搬到RAM中运行..搬移后的各段起始地址,.由以上宏来确定.
当从
N
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 系统 移植