linux开发环境建立内核的裁剪编译下载.docx
《linux开发环境建立内核的裁剪编译下载.docx》由会员分享,可在线阅读,更多相关《linux开发环境建立内核的裁剪编译下载.docx(30页珍藏版)》请在冰豆网上搜索。
linux开发环境建立内核的裁剪编译下载
第一章嵌入式开发环境的建立
嵌入式Linux开发环境一般由如下几部分构成:
Linux服务器(宿主机)、个
人PC机、嵌入式目标板和将它们连接在一起的网络环境,其具体结构如图1-1所示:
图1-1linux开发环境的结构
如图1-1所示的嵌入式Linux开发环境中,Linux服务器作为嵌入式Linux内核
编译、应用程序编译的公共平台,一般由单独的一台PC机充当,安装常用的桌面
标准Linux操作系统,如RedHatLinux等。
工作站即为普通的局域网络计算机,可以是一台或多台,以支持小组项目开发,
工作站一般安装常用的Windows操作系统,仍然可以完成各种日常工作,当需要使
用Linux服务器资源时,可从工作站远程登录到Linux服务器,以完成各项需要的
操作。
※注意:
本手册的环境是WindowsXP+VMware的形式,在XP下安装VMware,并在
VMware下虚拟安装RH9,两系统通过VMwareTools提供的共享目录交换文件。
这样
即方便又快捷。
第1节Linux安装
1、在VM启动画面下按F2,进入Boot,选择光盘启动;
2、在VM的Setting里选择光驱,并将其指向Linux的ISO;
3、顺序安装完毕即可。
4、
在接下来的选项中,选择,定制,建议进入每个菜单,完全选择。
第2节VMTools安装
1、启动Linux;
2、在VM的Setting里选择InstallVMwareTools;
3、在Linux控制台中执行以下命令Mount/dev/cdrom
Mkdir/arm
cp/mnt/cdrom/VMwareTools-6.0.4-93057.tar.gz/arm/VMwareTools-6.0.4-93057.tar.gz
umount/dev/cdrom
cd/arm
ls
tarzxfVMwareTools-6.0.4-93057.tar.gz
ls
cdvmware-tools-distrib
ls
./vmware-install.pl(注意前面的点)
然后一直回车。
重启。
4、在Setting./option里选择共享文件夹;
设置好共享即可实现LINUX与Windows下的文件共享。
第三节交叉编译环境安装
嵌入式Linux开发是宿主机—目标机(HOST-TARGET)交叉开发,这样您的
系统编译工具要换成交叉编译工具,对于这个,您只需要指明它的路径即可,需要
交叉开发环境,并且建立交叉编译环境:
您可以在我们的光盘中得到预先编译的交叉编译工具
cross-2.95.3.tar.bz2。
交叉编译工具一般由专门的机构负责维护,可以从网站
http:
//www.arm.linux.org.uk上免费下载,当然得需要编译,网站上一般提供原码。
以下描述已经编译好的交叉编译环境的建立过程:
首先以Root身份在Linux服务器上新建一个用于嵌入式Linux开发的工作目
录:
/home/work,以后所有的开发工作都在这个目录下进行。
编译工具以压缩包的形式,由恒颐提供,文件名为:
cross-2.95.3.tar.bz2,包括
linux-arm-gcc编译器和一些实用程序,位于光盘的目录:
\Software\Arm-Linux\Tools,
我们要把交叉编译工具安装在Linux服务器的/usr/local/目录下。
当拿到压缩文件后,在Linux服务器的/usr/local目录新建子目录arm:
#cd/usr/local
#mkdirarm;建立ARM目录
从PC机上通过FTP方式或VMware的共享目录的方式,将光盘中的文件
cross-2.95.3.tar.bz2传输到Linux服务器的/usr/local/arm目录,然后在Linux服务器
上进行将其解压缩:
#tarjxvfcross-2.95.3.tar.bz2
当以上的工作完成以后,就会在当前目录生成一个名为2.95.3的子目录,表明交
叉编译器已经成功安装到了/usr/local/arm下。
进入/usr/local/arm/2.95.3子目录,列表
查看目录所包含的内容。
#cd/usr/local/arm/2.95.3
#ls
arm-linuxbinincludeinfolibmansharetest-if-write
嵌入式编译工具就安装在这个目录中,可以完成源代码的编译。
这样您的开发环境已经建立在/usr/local/arm/2.95.3/bin下面,当然您需要使用的
时候,应该指出编译器的位置。
然后修改修改PATH变量:
为了可以方便使用arm-linux-gcc编译器系统,把arm-linux工具链目录加入到环境变量PATH中:
修改/etc/profile文件,添加pathmunge/usr/local/arm/2.95.3/bin即可。
#Pathmanipulation
if[`id-u`=0];then
pathmunge/sbin
pathmunge/usr/sbin
pathmunge/usr/local/sbin
pathmunge/usr/local/arm/2.95.3/bin
fi
pathmunge/usr/X11R6/binafter
设置环境变量后,最好是重启或注销一下,这样设置的环境变量才能生效。
第二章编译Uboot
我们提供给用户Uboot的源代码,共包含三个压缩格式的文件,位于光盘:
Software\uboot\source目录下,当用户需要对Uboot进行修改和编译时,可以按照如
下的操作步骤进行:
1、编译LOADER
将文件AT91RM9200-Loader.tar.gz拷贝到Linux服务器的某个目录,执行如下命
令解压文件:
#tarxzvfAT91RM9200-Loader.tar.gz
当文件解压完成以后,会自动生成AT91RM9200-Loader目录,进入该目录进行编译,
命令如下:
#cdAT91RM9200-Loader
#makeclean
#make
执行完上述命令以后,就会在当前目录下生成新的loader.bin文件。
2、编译BOOT
将文件AT91RM9200-Boot.tar.gz拷贝到Linux服务器的某个目录,执行如下命
令解压:
#tarxzvfAT91RM9200-Boot.tar.gz
当文件解压完成以后,会自动生成AT91RM9200-Boot目录,进入该目录进行编译,
命令如下:
#cdAT91RM9200-Boot
#makeclean
#make
执行完上述命令以后,就会在当前目录下生成新的boot.bin文件。
3、编译UBOOT
将文件u-boot-1.0.0.tar.gz拷贝到Linux服务器的某个目录,执行如下命令解压:
#tarxzvfu-boot-1.0.0.tar.gz
当文件解压完成以后,会自动生成u-boot-1.0.0目录,进入该目录进行编译,命令如
下:
#cdu-boot-1.0.0
#makeclean
#makeall
执行完上述命令以后,就会在当前目录下生成新的uboot.bin文件,执行如下命
令对uboot.bin进行压缩:
#gzip-cu-boot.bin>u-boot.gz
※注意:
以上的操作可能需要超级用户权限。
压缩完成以后,在当前目录下生成u-boot.gz,接下来该怎么做您都知道了吧?
对,就是按照第三章已经描述过的步骤,将生成的各个文件烧写到Flash里就可以
了。
第三章嵌入式Linux内核的配置与编译
Linux之所以能成为一种流行的嵌入式操作系统,除具有功能强大、高性能、稳
定性好以及源代码开发等优势以外,其最大的特点是Linux内核具有非常良好的结
构,可由用户根据特定的系统需求,对内核进行配置或裁减,而这一特点恰恰满足
了嵌入式应用的差异性需求。
嵌入式系统最大的特征是差异性,几乎每一个嵌入式应用都是唯一的,这种差
异性体现在硬件方面,就表现为系统可以采用不同的微处理器架构,如X86、ARM、
PowerPC、MIPS等,同时,即使采用同一种微处理器架构,不同生产商生产的微处
理器也会有不小的差异,运行在这些嵌入式微处理器上的操作系统也会有所相同,
因此,如何得到一个适合在某个特定的嵌入式系统上运行的Linux内核,是我们首先
要解决的问题。
我们提供可以稳定运行在H9200F的嵌入式Linux内核包,位于光盘目录:
Software\Arm-Linux\Source\Kernel。
将该Linux内核源代码包linux-2.4.27-xxxxxx-AT91RM9200.tar.bz2和
stand_config拷贝到Linux服务器上我们约定的工作目录:
/home/work,然后执行如
下命令解压:
#tarjxvflinux-2.4.27-xxxxxx-AT91RM9200.tar.bz2
该命令执行完毕后,生成目录linux-2.4.27-xxxxxx-AT91RM9200。
然后将stand_config拷入此目录,并进行如下操作替换配置文件:
#rm–f.config;删除原有配置文件
#mvstand_config.config;将新配置文件改名为.config
注意文件名中的“xxxxxx”为文件生成的时间,我们会定期更新Linux内核的版
本。
Linux内核的配置(或裁剪)是与嵌入式系统的应用需求相适应的。
尽管Linux
内核功能强大,支持的设备众多,但对于一个特定的嵌入式应用来说,可能只会使
用到其中的部分功能,而对于其它不使用的部分,如果让它驻留在系统中,不但耗
费系统资源,同时还会增加系统安全隐患,因此,内核配置的目的,就是保留系统
需要的功能,去掉不必要的部分,使操作系统以最精简、最优化的状态运行。
Linux内核支持三种配置方式,第一种方式是基于命令行的问答方式,针对每一
个内核配置选项会有一个提问,回答“y”包含该项功能,回答“n”则不包含该项功能。
通过执行makeconfig可以开始第一种方式。
第二种是菜单式的,用户可以在Linux服务器或网络中的某个工作站进行操作,
执行makemenuconfig命令以后,会出现一个配置菜单,通过该菜单可以很方便的进
行内核的配置。
第三种方法也是采用菜单方式进行配置的,但必须在Linux服务器上执行。
通过
执行makexconfig可以开始第三种方式。
显然,三种方式的实质是相同的,我们通常使用第二种方式进行配置,这种方
式简单明了,受条件制约小。
执行如下命令:
#makemenuconfig
※注意:
该命令可能需要超级用户权限。
系统出现图4-2所示的内核配置界面:
图4-2嵌入式Linux内核的配置界面
用户也许对配置选项的意义不是完全明白,可以先不用管他,我们已经对内核
做了比较合理的配置,建议在开始接触时不要做修改。
当用户在根据自己的系统需求配置好内核,退出配置菜单时,需要保存修改后
的内核配置,如图4-3所示。
图4-3嵌入式Linux内核配置保存界面
※注意:
更换配置文件后第一次进入内核配置界面并退出是必须保存,以生成配置头
文件。
若用户选择不保存,则进行的所有配置操作无效,内核配置仍然为原来的状态,
若选择保存,系统会在当前目录下生成一个.config文件,其后要进行的内核编译就
是根据这个.config文件来进行条件编译以生成相应的可执行文件的。
当完成对Linux内核的配置以后,内核仍然以源代码的方式存在,不能直接下载
到嵌入式系统运行,因此,需要对内核进行编译,生成最终可以在嵌入式系统上运
行的可执行代码。
依次执行如下命令,对Linux内核进行编译:
#makeclean;该命令用于清除旧的编译文件
#makedep;该命令用于生成系统相应的依赖文件
#./automake
当您以极大的耐心执行完以上的步骤,如果运气不错的话,会在当前目录下生
成内核压缩映象文件uImage,好啦,停下来喘口气吧!
第4章NFS(网络文件系统)建立与配置方法
网络文件系统(NFS,NetworkFileSystem)是一种将远程主机上的分区(目录)
经网络挂载到本地系统的一种机制,通过对网络文件系统的支持,用户可以在本地
系统上像操作本地分区一样来对远程主机的共享分区(目录)进行操作。
在嵌入式Linux的开发过程中,开发者需要在Linux服务器上进行所有的软件
开发,交叉编译后,通用FTP方式将可执行文件下载到嵌入式系统运行,但这种方
式不但效率低下,且无法实现在线的调试。
因此,可以通过建立NFS,把Linux服务器上的特定分区共享到待调试的嵌入
式目标系统上,就可以直接在嵌入式目标系统上操作Linux服务器,同时可以在线
对程序进行调试和修改,大大的方便了软件的开发。
因此,NFS的是嵌入式Linux开
发的一个重要的组成部分,本部分内容将详细说明如何配置嵌入式Linux的NFS开
发环境。
嵌入式Linux的NFS开发环境的实现包括两个方面:
一是Linux服务器端的
NFS服务器支持;二是嵌入式目标系统的NFS客户端的支持。
因此,NFS开发环
境的建立需要配置Linux服务器端和嵌入式目标系统端。
1.Linux服务器端NFS服务器的配置
以root身份登陆Linux服务器,编辑/etc目录下的共享目录配置文件exports,
指定共享目录及权限等。
执行如下命令编辑文件/etc/exports:
#vi/etc/exports
在该文件里添加如下内容:
/home/work192.168.0*(rw,sync,no_root_squash)
然后保存退出。
添加的内容表示:
允许ip地址范围在192.168.0.*的计算机以读写的权限来访问
/home/work目录。
/home/work也称为服务器输出共享目录。
括号内的参数意义描述如下:
◆rw:
读/写权限,只读权限的参数为ro;
◆sync:
数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于
内存中,而不立即写入硬盘。
◆no_root_squash:
NFS服务器共享目录用户的属性,如果用户是root,那
么对于这个共享目录来说就具有root的权限。
接着执行如下命令,启动端口映射:
#/etc/rc.d/init.d/portmapstart
最后执行如下命令启动NFS服务,此时NFS会激活守护进程,然后就开始监
听Client端的请求:
#/etc/rc.d/init.d/nfsstart
用户也可以重新启动Linux服务器,自动启动NFS服务。
在NFS服务器启动后,还需要检查Linux服务器的防火墙等设置(一般需要关
闭防火墙服务),确保没有屏蔽掉NFS使用的端口和允许通信的主机,主要是检查
Linux服务器iptables,ipchains等选项的设置,以及/etc/hosts.deny,/etc/hosts.allow
文件。
首先在Linux服务器上进行NFS服务器的回环测试,验证共享目录是否能够被
访问。
在Linux服务器上运行如下命令:
#mount–tnfs192.168.0.20:
/home/work/mnt
#ls/mnt
命令将Linux服务器的NFS输出共享目录挂载到/mnt目录下,因此,如果NFS
正常工作,应该能够在/mnt目录看到/home/work共享目录中的内容。
※注意:
我们Linux服务器IP地址是192.168.0.20,用户如有不同,请对命令中的IP
地址进行相应的修改。
2.嵌入式目标系统NFS客户端的配置
在Linux服务器设置好后,接下来还需要对客户端进行相关配置。
我们已在目标系统所提供给用户的Linux内核进行了相应的配置,用户可以省
略这一步的相关操作。
在嵌入式目标系统的LinuxShell下,执行如下命令来进行NFS共享目录挂载:
#mount–tnfs192.168.0.20:
/home/work/mnt/nfs–onolock
#cd/mnt/nfs
#ls
此时,嵌入式目标系统端所显示的内容即为Linux服务器的输出目录的内容,
即Linux服务器的输出目录/home/work通过NFS映射到了嵌入式目标系统的
/mnt/nfs目录。
用户可以用增/删/修改文件的方式来验证实际效果。
mount命令中的192.168.0.20为Linux服务器的IP地址,/home/work为Linux
服务器端所配置的共享输出目录,/mnt/nfs为嵌入式设备上的本地目录。
由于很多
嵌入式设备的根文件系统中不带portmap,所以一般都使用-onolock选项,不需要使用
NFS文件锁来避免使用portmap。
第五章uboot和linux的烧写
第一节UBOOT的烧写
当系统系统因误擦除了FLASH或因其他原因不能启动时,就需要运行
AT91RM9200片内ROM的程序,重新烧写UBOOT。
在以下的操作过程中,会使
用到4个文件:
boot.bin、loader.bin、u-boot.bin和u-boot.gz,这4个文件位于CD:
Software\uboot\bin:
1.启动片内ROM的程序
将系统串口与PC串口相连,并连接好系统的网线,将H9200F的跳线J100的2
-3短接,然后复位系统,打开超级终端设置串口为:
115200、8、无、1、无,如
图5-1:
图5-1设置超级终端
在超级终端会出现“CCCCCCCC…..”,此时AT91RM9200片内ROM的程序已
开始运行,如图5-2所示:
图5.2启动片内ROM
2.下载Uboot到SDRAM中运行
在超级终端,使用Xmodem协议,发送loader.bin文件,然后超级终端会出现下载
Uboot的提示,并继续出现“CCCCCCCCC………”如图5-3所示:
图5-3发送loader.bin文件
继续使用Xmodem协议,发送uboot.bin文件,此时uboot.bin被发送到系统的
SDRAM中,发送完毕后uboot开始运行,显示>U-Boot的提示符,如图5-4所示:
图5-4发送uboot.bin文件
3.擦除Flash
在对Flash进行烧写之前,需要将其擦除:
Uboot>protectoffall;去掉Flash的扇区写保护
Uboot>eraseall;擦除Flash的所有扇区
4.烧写Boot.bin到Flash
在Uboot提示符下键入命令:
Uboot>loadb20000000;将boot.bin发送到系统的SDRAM中
然后在超级终端使用Kermit协议,发送文件boot.bin,发送完毕后,键入以下
命令:
Uboot>cp.b20000000100000005fff;将发送到SDRAM中的数据写入Flash
Uboot>protecton1000000010005fff;对写入Flash的内容进行写保护
运行结果如图5-5所示;
图5-5烧写Boot.bin文件
5.烧写Uboot.gz到Flash
在Uboot提示符下键入命令:
装入Uboot.gz
Uboot>loadb20000000;将文件发送到系统的SDRAM中
然后在超级终端使用Kermit协议,发送文件Uboot.gz,发送完毕后,键入以下
命令:
Uboot>cp.b2000000010010000ffff;将发送到SDRAM中的数据写入Flash
Uboot>protecton100000001001ffff;对写入Flash的内容进行写保护
运行结果如图5-6所示:
图5-6烧写Uboot.gz文件
以上完成了UBOOT的烧写,然后断电,将J100跳至1-2,重新启动回进入
UBOOT。
第二节AT91RM9200的内核烧写
采用flash中启动linux的方法进行内核烧写,执行如下的步骤:
1.复位系统,然后设置u-boot的启动参数如下:
Uboot>setenvbootargsroot=/dev/mtdblock/3console=ttyS0,115200mem=32M
Uboot>setenvimagecp.b1002000021000000e0000
Uboot>setenvramdiskrun
Uboot>setenvbootbootm21000000
Uboot>setenvbootcmdrunimage\;runboot
Uboot>setenvethaddr00:
12:
34:
56:
78:
9a;可能会出现“Can'toverwrite
ethaddr”的提示,可以不管。
Uboot>setenvipaddr192.168.0.165;目标板的IP
Uboot>setenvserverip192.168.0.161;个人电脑windows的IP
Uboot>setenvbootdelay1
Uboot>saveenv
运行结果如图5-7所示:
图5-7设置Uboot启动参数
2.现在就可以将内核通过tftp下载到sdram中,然后拷贝到flash中了。
打开uImagejffs2.img所在文件夹下的TFTPSRV.EXE然后最小化,TFTPSRV.EXE所在
目录如图5-8所示:
图5-8运行TFTPSRV.EXE
Uboot>tftp21000000uImage
Uboot>cp.b2100000010020000e0000
运行状态如图5-9所示:
图5-9固化内核到flash
这可能需要一定的时间,请耐心等待,不要断电。
Uboot>tftp21100000jffs2.img
Uboot>cp.b2110000010100000260000;
※注意:
0x260000=2432KB表示的是jffs2.img的大小,可以根据实际jffs2.img
大小进行选择,注意不要小于实际大小即可。
运行结果如图5-10所示:
图5-10固化根文件系统到flash
这可能需要一定的时间,请耐心等待,不要断电。
3.拷贝完成后,复位系统