嵌入式linux系统的构建Word文档下载推荐.docx
- 文档编号:16881134
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:10
- 大小:218.50KB
嵌入式linux系统的构建Word文档下载推荐.docx
《嵌入式linux系统的构建Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《嵌入式linux系统的构建Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
BootloaderRootfilesystem
Kernel
Bootparameters
图(a)
下面对嵌入式Linux系统的几个主要部分做一下详细的介绍:
1:
Bootloader
U-Boot,全称为UniversaiBootLoader,即通用Bootloader,是遵循GPL条款的开发源代码项目。
简单的说,BootLoader就是在操作系统运行之前的运行的一段小程序。
通过这段小程序,可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备。
BootLoader的实现非常依赖于具体硬件,在嵌入式系统中硬件配置千差万别,即使是相同的CPU,它的外设也可能不同,所以不可能有一个BootLoader支持所有的CPU、所有的电路板。
即使是支持CPU架构比较多的U-Boot,也不是一拿来就可以使用的,需要进行一些移植。
在嵌入式系统中,通常没有像BIOS那样的固件程序,因此整个系统的加载启动任务完全由BootLoader来完成。
(1)Bootloader可以分为两种操作模式:
启动加载模式和下载模式。
1>
启动加载模式:
启动模式上电后,BootLoader从板上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。
2>
下载模式:
在下载模式下,开发人员可以使用各种命令,通过串口连接或网络连接等通信手段从主机下载文件,将它们直接放在内存运行或是烧入Flash类固态存储设备中。
(2)Bootloader的启动过程可以分为单阶段,多阶段两种。
这两阶段完成的功能如下所示:
Bootloader第一阶段的功能:
硬件设备初始化;
为加载Bootloader的第二阶段代码准备RAM空间;
3>
复制Bootloader的第二阶段代码到RAM空间中;
4>
设置好栈;
5>
跳转到第二阶段代码的C入口点;
Bootloader第二阶段的功能:
初始化本阶段要使用到的硬件设备;
检测系统内存映射;
(检测内存映射,就是确定板上使用了多少内容、它们的地址空间是什么。
)
将内核映像和根文件系统映像上读到RAM空间中;
为内核设置启动参数;
调用内核;
(不过在调用内核之前,需要满足下列条件:
CPU寄存器的设置;
CPU工作模式;
Cache和MMU的设置)
注:
通常多阶段的Bootloader能提供更为复杂的功能以及更好的可移植性,从固态存储设备上启动的Bootloader大多都是两阶段的启动过程。
(3)Bootloader与内核的交互
Bootloader与内核的交互是单向的,Bootloader将各类参数传给内核。
由于它们不能同时运行,传递办法只有一个:
Bootloader将参数放在某个约定的地方之后,再启动内核,内核启动后从这个地方获取参数。
(4)U-Boot的配置、编译、连接过程
根据顶层Readme文件的说明,可以知道如果要使用开发板board/<
board_name>
,就先执行“make<
_config”命令进行配置,然后执行“makeall”,就可以生成如下3个文件:
U-Boot.bin:
二进制可执行文件,它就是可以直接烧入ROM、NORFlash的文件。
U-Boot:
ELF格式的可执行文件。
U-Boot.srec:
MotorolaS-Record格式的可执行文件。
(5)U-Boot的启动过程源码分析
1)U-Boot第一阶段代码分析
硬件设备初始化。
为加载Bootloader的第二阶段代码准备RAM空间。
复制Bbootloader的第二阶段代码到RAM空间中。
设置好栈。
跳转到第二阶段代码的C入口点。
2)U-Boot第二阶段代码分析
初始化本阶段要使用到的硬件设备。
检测系统内存映射。
U-Boot命令的格式
4>
为内核设置启动参数。
移植U-Boot的主要工作在于对硬件的初始化、驱动,所以重点应放在硬件的操作上。
(6)U-Boot的移植
BANK0外接容量为1MB,位宽为8的NORFlash芯片AM29LV800.
BANK3外接10M网卡芯片CS8900,位宽为16.
BANK6外接两片容量为32MB、位宽为16的SDRAM芯片K4S561632,组成容量为64MB、位宽位32的内存。
通过NANDFlash控制器外接容量为64MB,位宽位8的NANDFlash芯片K9S1208.(7)使用U-Boot来执行程序
但如果使用U-Boot来烧写NANDFlash,效率会高很多。
烧写二进制文件到NANDFlash中所使用的命令与烧写内核映像文件ulmagede过程类似,只是不需要将二进制文件制作成U-Boot格式。
2:
内核
Linux内核的版本号可以从源代码的顶层目录下的Makefile中查到,在此主要了解内核的结构,LinuxMakefile分析和根文件系统的一些基础概念:
(1)内核的结构:
Linux内核文件数目将近2万,除去其他构架CPU的相关文件,支持S3C2410、S3C2440这两款芯片的完整内核文件有1万多个。
这些文件组织结构并不复杂,他们分别位于顶层目录下的17个子目录,各个目录功能独立;
(2)LinuxMakefile分析:
makefilede可以决定编译那些文件、怎样编译文件、怎样连接文件;
(3)根文件系统:
嵌入式Linux中都需要构建根文件系统,构建根文件系统的规则在FHS(FilesystemHierarchyStandard)文档中。
Linux的根文件系统以树型结构组织,包含内核和系统管理所需要的各种文件和程序,一般说来根目录"
/"
下的顶层目录都有一些比较固定命名和用途。
下表出了一个Linux根文件系统中的比较常见的目录结构:
3:
根文件系统的制作
(1)进入到/opt/studyarm目录,新建建立根文件系统目录的脚本文create_rootfs_bash,使用命令chmod+xcreate_rootfs_bash改变文件的可执行限,./create_rootfs_bash运行脚本,就完成了根文件系统目录的创建。
create_rootfs_bash的内容如下:
#!
/bin/sh
echo"
------Createrootfsdirectonsstart...--------"
mkdirrootfs
cdrootfs
--------Createroot,dev....----------"
mkdirrootdevetcboottmpvarsysproclibmnthome
mkdiretc/init.detc/rc.detc/sysconfig
mkdirusr/sbinusr/binusr/libusr/modules
makenodeindev/consoledev/null"
mknod-m600dev/consolec51
mknod-m600dev/nullc13
mkdirmnt/etcmnt/jffs2mnt/yaffsmnt/datamnt/temp
mkdirvar/libvar/lockvar/runvar/tmp
chmod1777tmp
chmod1777var/tmp
-------makedirectiondone---------"
(2)建立动态链接库:
动态链接库直接用友善之臂的,先解压友善之臂的根文件包,拷贝lib的内容到新建的根文件目录lib内。
(3)修改busybox目录下的Makefile文件
CROSS_COMPILE?
=arm-linux-//第164行
ARCH?
=arm//第189
输入makemenuconfig行编译界面如下:
关于它的busybox的配置我们可以使用如下的配置
(1)、BusyboxSettings--->
GeneralConfiguration--->
[*]Showverboseappletusagemessages
[*]Storeappletusagemessagesincompressedform
[*]Support–install[-s]toinstallappletlinksatruntime
[*]Enablelocalesupport(systemneedslocaleforthistowork)
[*]Supportfor–long-options
[*]Usethedevptsfilesystemforunix98PTYs
[*]Supportwritingpidfiles
[*]RuntimeSUID/SGIDconfigurationvia/etc/busybox.config
[*]Suppresswarningmessageif/etc/busybox.confisnotreadable
BuildOptions--->
[*]BuildBusyBoxasastaticbinary(nosharedlibs)
[*]BuildwithLargeFileSupport(foraccessingfiles>
2GB)
InstallationOptions->
[]Don’tuse/usr
Appletslinks(assoft-links)--->
(./_install)BusyBoxinstallationprefix
BusyboxLibraryTuning--->
(6)Minimumpasswordlegth
(2)MD5:
TradeBytesforSpeed
[*]Fsater/procscanningcode(+100bytes)
[*]Commandlineediting
(1024)Maximumlengthofinput
[*]vi-stylelineeditingcommands
(15)Historysize
[*]Historysaving
[*]Tabcompletion
[*]Fancyshellprompts
(4)Copybuffersize,inkilobytes
[*]Useioctlnamesratherthanhexvaluesinerrormessages
[*]SupportinfinibandHW
(2)、LinuxModuleUtilities--->
(/lib/modules)Defaultdirectorycontainingmodules
(modules.dep)Defaultnameofmodules.dep
[*]insmod
[*]rmmod
[*]lsmod
[*]modprobe
-----optionscommontomultiplemodutils
[]supportversion2.2/2.4Linuxkernels
[*]Supporttaintedmodulecheckingwithnewkernels
[*]Supportformodule.aliasesfile
[*]supportformodules.symbolsfile
(4)建立etc目录下的配置文件
a、etc/mdev.conf文件,内容为空。
b、拷贝主机etc目录下的passwd、group、shadow文件到rootfs/etc目录下。
c、etc/sysconfig目录下新建文件HOSTNAME,内容为”H3-Studio”。
d、etc/inittab文件:
#etc/inittab
:
sysinit:
/etc/init.d/rcS
s3c2410_serial0:
askfirst:
-/bin/sh
ctrlaltdel:
/sbin/reboot
shutdown:
/bin/umount-a–r
e、etc/init.d/rcS文件:
PATH=/sbin:
/bin:
/usr/sbin:
/usr/bin
runlevel=S
prevlevel=N
umask022
exportPATHrunlevelprevlevel
----------muntall----------------"
mount-a
echo/sbin/mdev>
/proc/sys/kernel/hotplug
mdev-s
***********************************************"
****************StudyingARM*********************"
Kernelversion:
linux-2.6.29.1"
Student:
Huanghuahai"
Date:
2009.10.1"
/bin/hostname-F/etc/sysconfig/HOSTNAME
Chmod+xrcS
f、etc/fstab文件:
#devicemount-pointtypeoptiondumpfsckorder
proc/procprocdefaults00
none/tmpramfsdefaults00
sysfs/syssysfsdefaults00
mdev/devramfsdefaults00
g、etc/profile文件:
#Ashprofile
#vim:
syntax=sh
#Nocorefilebydefaults
#ulimit-S-c0>
/dev/null2>
&
1
USER="
id-un"
LOGNAME=$USER
PS1='
[\u@\h=W]#'
PATH=$PATH
HOSTNAME='
/bin/hostname'
exportUSERLOGNAMEPS1PATH
(5)使用以下命令安装好yaffs文件系统制作工具:
tar–zxvfmkyaffs2image.tgz–C/
在/opt/studyarm目录下,使用命令mkyaffs2imagerootfsrootfs.img生成根文件系统映像文件。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 linux 系统 构建