嵌入式Linux编程入门与开发实例-第3章资料课件

PPT
  • 阅读 95 次
  • 下载 0 次
  • 页数 77 页
  • 大小 310.000 KB
  • 2022-11-12 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
嵌入式Linux编程入门与开发实例-第3章资料课件
可在后台配置第一页与第二页中间广告代码
嵌入式Linux编程入门与开发实例-第3章资料课件
可在后台配置第二页与第三页中间广告代码
嵌入式Linux编程入门与开发实例-第3章资料课件
可在后台配置第三页与第四页中间广告代码
嵌入式Linux编程入门与开发实例-第3章资料课件
嵌入式Linux编程入门与开发实例-第3章资料课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 77
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】嵌入式Linux编程入门与开发实例-第3章资料课件.ppt,共(77)页,310.000 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-2519.html

以下为本文档部分文字说明:

第3章构建嵌入式Linux开发环境【学习目标】熟悉嵌入式系统开发环境的构建熟悉U-Boot的移植掌握嵌入式Linux操作系统内核编译第3章构建嵌入式Linux开发环境嵌入式系统开发环境的构建3.

1U-boot的移植3.2嵌入式Linux操作系统内核编译3.3习题与练习3.43.1嵌入式系统开发环境的构建所谓交叉编译,就是利用运行在某台计算机(宿主机)上的编译器编译某个源程序,生成在另一台机器(目标机)上运行的目标代码的过程。

使用交叉编译的原因主要有两个,一是目标平台所需要的Bootloader以及操作系统核心没有建立起来时,需要做交叉编译;二是一般目标板的资源都比较有限,不具备一定的处理器能力和存储空间,需要有强大的宿主PC机为它完成大部分的调试编译任务。

binutils:是一组二进制处理工具的集合,包括连接器,汇编器和其他用于目标文件和档案的工具。二进制工具binutils的主要工具介绍如下:addr2line:把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会

使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。ar:建立、修改、提取档案文件。档案文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。as:主要用来编译GNUC编译器gcc输出的

汇编文件,产生的目标文件由连接器ld连接。c++filt:连接器使用它来过滤C++和Java符号,防止重载函数冲突。gprof:显示程序调用段的各种数据。ld:是连接器,它把一些目标和归档文件结合在一起,重定位数据,

并链接符号引用。通常,建立一个新编译程序的最后一步就是调用ld。nm:列出目标文件中的符号。objcopy:把一种目标文件中的内容复制到另一种类型的目标文件中.objdump:显示一个或者更多目标文件的信息。使用选项来进行控制。ranlib:产生归档文件索引,并将其保存到

这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件。readelf:显示ebf格式可执行文件的信息。size:列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行

输出。size:列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。strings:打印某个文件的可打印字符串,这些字符串最少4个字符长,也可以使用

选项-n设置字符串的最小长度。默认情况下,它只打印目标文件初始化和可加载段中的可打印字符;对于其它类型的文件它打印整个文件的可打印字符,这个程序对于了解非文本文件的内容很有帮助。strip:丢弃目标文件中的全部或者特定符号。libiberty:包含许多GNU程序都会用到的函数,这些程

序有:getopt,obstack,strerror,strtol和strtoul等。libbfd:二进制文件描述库。libopcodes:用来处理opcodes的库,在生成一些应用程序的时候也会用到它。windres:一个windows资

源的编译器。GCC:工具是编译程序的最为主要的工具。GCC包括以下几个主要的工具:Cpp:C预处理器。g++:C++编译器。gcc:C编译器。gccbug:创建bug报告的Shell脚本。gcov:分析在程序中哪里做优化效果好。libgcc*:gcc的运行库。l

ibstdc++:标准C++库,包含许多常用函数。libsupc++:提供支持C++语言的库函数。Glibe:是提供系统调用和基本函数的C库,比如open(),malloc(),printf()等等。所有动态连接的程序都要用到它。Glibc中主要有以下程序:catchsegv:当程序发生

segmentationfault的时候,用来建立一个堆栈跟踪。gencat:建立消息列表。getconf:针对文件系统的指定变量显示其系统设置值。getent:从系统管理数据库获取一个条目。glibcbug:建立glibc的b

ug报告并且发送到bug报告的邮件地址。iconv:转化字符集。iconvconfig:建立快速读取的iconv模块所使用的设置文件。ldconfig:设置动态链接库的实时绑定。ldd:列出每个程序

或者命令需要的共享库。lddlibc4:辅助ldd操作目标文件。locale:是一个Perl程序,可以告诉编译器打开或关闭内建的locale支持。localedef:编译locale标准。nscd:提供对常用名称

设备调用的缓存的守护进程。nscd_nischeck:检查在进行NIS+侦查时是否需要安全模式。pcprofiledump:打印PCprofiling产生的信息。pt_chown:是一个辅助程序,帮助grantpt设置子虚拟终端的属主,用户组和读写权限。rpc

gen:产生实现RPC协议的C代码。rpcinfo:对RPC服务器产生一个RPC呼叫。sln:用来创建符号链接,由于它本身是静态连接的,在动态连接不起作用的时候,sln仍然可以建立符号链接。sprof:读取并显示共享目标的特征

描述数据。tzselect:对用户提出关于当前位置的问题,并输出时区信息到标准输出。xtrace:通过打印当前执行的函数跟踪程序执行情况。zdump:显示时区。zic:时区编译器。ld.so:帮助动态链接库的执行。libBroke

nLocale:帮助程序处理破损locale,如Mozilla。libSegFault:处理segmentationfault信号,试图捕捉segfaults。libanl:异步名称查询库。Libb

sd-compat:为了在linux下执行一些BSD程序,libbsd-compat提供了必要的可移植性。libc:是主要的C库--常用函数的集成。libcrypt:加密编码库。libdl:动态连接接口。libg:g++的运行时。libi

eee:IEEE浮点运算库。libm:数学函数库。libmcheck:包括了启动时需要的代码。libmemusage:帮助memusage搜集程序运行时内存占用的信息。libnsl:网络服务库

。libnss*:是名称服务切换库,包含了解释主机名,用户名,组名,别名,服务,协议等等的函数。libpcprofile:帮助内核跟踪在函数,源码行和命令中CPU使用时间。libpthread:POSIX线程库。libresolv:创建,发

送及解释到互联网域名服务器的数据包。librpcsvc:提供RPC的其他服务。librt:提供了大部分的POSIX.1b实时扩展的接口。libthread_db:对建立多线程程序的调试很有用。libutil:包含了在很多不同的Unix程序中使用的“标准”

函数。3.2移植U-bootBootloader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系

统内核准备好正确的环境。针对ARM处理器,常见的Bootloader有U-Boot、RedBoot、ARMBoot等:U-Boot:它是sourceforge上的一个开放源代码的项目,可对PowerPC、ARM、MIPS、x86等处理

器提供支持,它支持的嵌入式操作系统有Linux、VxWorks、NetBSD、QNX、RTEMS等,是目前支持最广泛、使用最多的Bootloader。3.2.1Bootloader概述RedBoot:RedBoot是Redhat公司随eCos(Embedded

ConfigurableOperatingSystem)发布的一个Boot方案,是一个开源项目。ARMBoot:是sourceforge上的一个开放源代码的项目,它最初的设计只是针对ARM处理器体系结构,所以它可以很容易地被移植到各种以ARM为核心的平台上。图3-1是一个同时

装有Bootloader、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空间分配结构图。BootloaderBootparameterKernelFileSystem图3-1固态存储设备的典型空间分配结构3.2.2Bootloader的启动流程Bootl

oader的启动过程有单阶段(SingleStage)和多阶段(Multi-Stage)两种形式。通常多阶段的Bootloader能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的Bootloader大多都是2阶段的启动过程,也即启动过程可以分

为stage1和stage2两部分。stage1通常包括以下步骤(按执行的先后顺序):(1)硬件设备初始化。这是Bootloader一开始就执行的操作,其目的是为stage2的执行以及随后的kernel的执行准备好一些基本的硬件环境。它通常包括以下步骤:屏蔽所有

的中断。为中断提供服务通常是OS设备驱动程序的责任,因此在Bootloader的执行全过程中可以不必响应任何中断。中断屏蔽可以通过写CPU的中断屏蔽寄存器或状态寄存器(比如ARM的CPSR寄存器)来完成。设置CPU的速度和时钟

频率。RAM初始化。包括正确地设置系统的内存控制器的功能寄存器以及各内存库控制寄存器等。初始化LED。典型地,通过GPIO来驱动LED,其目的是表明系统的状态是OK还是Error。如果板子上没有L

ED,那么也可以通过初始化UART向串口打印Bootloader的Logo字符信息来完成这一点。关闭CPU内部指令/数据cache。(2)为加载Bootloader的stage2准备RAM空间。为了获得更快的执行速度,通常把stage2加载到RAM空

间中来执行,因此必须为加载Bootloader的stage2准备好一段可用的RAM空间范围。(3)拷贝Bootloader的stage2到RAM空间中。拷贝时要确定stage2的可执行映象在固态存储设备的存放起始地址和终止地址一级RAM空间的起始地址。(4)设置好堆栈。堆栈指针的设置是

为了执行C语言代码作好准备。此外,在设置堆栈指针sp之前,也可以关闭LED灯,以提示用户准备跳转到stage2。经过上述这些执行步骤后,系统的物理内存布局应该如下图3-2所示。阶段1为阶段2可执行映像的RAM地址范围:1MB(blank)ramdisk(blank)内

核映像(blank)Bootloader的阶段2可执行映像的可能大小:64KBBootloader的阶段1可执行映像大小:1KBFlash地址空间堆栈指针sp:stage2_2end-4Stage2_star

t0x0001,0000(64KB)0x0000,0400(1KB)0x0000,0000„„„„„„图3-2Bootloader的stage2可执行映象刚被拷贝到RAM空间时的系统内存布局(5)跳转到stage2的C入口点。在上述一切都就绪后,就可以跳转到Bootloader的stag

e2去执行了。比如,在ARM系统中,可以通过修改PC寄存器为合适的地址来实现。stage2通常包括以下步骤(按执行的先后顺序):(1)初始化本阶段要使用到的硬件设备。通常包括:初始化至少一个串口,以便和终端用户进行I/O输出信息;初始化计时器等。在初始化这些设备之前,也可以重新把LED灯点亮,以

表明已经进入main()函数执行。设备初始化完成后,可以输出一些打印信息,程序名字字符串、版本号等。(2)检测系统内存映射(memorymap)。所谓内存映射就是指在整个4GB物理地址空间中有哪些地址范围被分配用来寻址系统的RAM单元。(3)将kernel映像和根文

件系统映像从Flash上读到RAM空间中。首先规划内存占用的布局,这里包括两个方面:内核映像所占用的内存范围;根文件系统所占用的内存范围。在规划内存占用的布局时,主要考虑基地址和映像的大小两个方面。对于内核映像,一般将其拷贝到从基地址开始的大约

1MB大小的内存范围内。(4)为内核设置启动参数。在将内核映像和根文件系统映像拷贝到RAM空间中后,就可以准备启动Linux内核了。但是在调用内核之前,应该作一步准备工作,即设置Linux内核的启动参数。(5)调用内核。Boot

loader调用Linux内核的方法是直接跳转到内核的第一条指令处,也即直接跳转到MEM_START+0x8000地址处。在跳转时,下列条件要满足:CPU寄存器的设置:R0=0;R1=机器类型ID;关

于MachineTypeNumber,可以参见linux/arch/arm/tools/mach-types;R2=启动参数标记列表在RAM中起始基地址。CPU模式:必须禁止中断(IRQs和FIQs);CPU必须SVC模式。Cache和MMU的设置:MMU必须关闭;

指令Cache可以打开也可以关闭;数据Cache必须关闭。Bootloader的系统启动方案流程如图3-3所示。设置异常向量表启动内核复制内核镜像到SDRAM进入启动加载模式进入C代码区设置中断处程序入口初始化堆栈复制RO/RW段初始化复制Flash代码到内存的

重映射SDRAM初始化、内存映射设置系统时钟和总线禁止中断Flash中运行程序SDRAM中运行程序汇编代码区C代码区图3-3Bootloader系统启动方案流图3.2.3U-Boot分析与移植U-Boot(UniversalBootloader),即通

用Bootloader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其前身是由德国DENX软件工程中心的WolfgangDenk基于8xxROM的源码创建的PPCBOOT工程

。U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌入式操作系统。其目前要支持的目标操作系统是OpenBSD,NetBSD,FreeBSD,4.4BSD,Linux,SVR

4,Esix,Solaris,Irix,SCO,Dell,NCR,VxWorks,LynxOS,pSOS,QNX,RTEMS,ARTOS。U-Boot有如下特性:开放源码,支持多种嵌入式操作系统内核,如Linux、NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS;支持

多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale;较高的可靠性和稳定性;高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEP

ROM、RTC、键盘等;较为丰富的开发调试文档与强大的网络技术支持;支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统;支持NFS挂载、从Flash中引导压缩或非压缩系统内核;可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与

产品发布,尤其对Linux支持最强;支持目标板环境变量多种存储方式,如Flash、NVRAM、EEPROM;CRC32校验,可校验Flash中内核、RAMDISK镜像文件是否完好。上电自检功能:SDRAM、Flash大小自动检测,SDRAM故障检测,CPU型号。特殊功能:

XIP内核引导。U-Boot源码结构:从网站上下载得到U-Boot源码包,例如:U-Boot-1.1.26tar.bz2,解压就可以得到全部U-Boot源程序。在顶层目录下有26个子目录,分别存放和管理不同的源程序。这些目录中所要存放的文件有其规则,

可以分为4类。第1类目录与处理器体系结构或者开发板硬件直接相关;第2类目录是一些通用的函数或者驱动程序;第3类目录是通用的设备驱动程序。第4类目录是U-Boot的应用程序、工具或者文档。目录特性解释说明board平台依赖存放电路板相关的目录文件,例如

:RPXlite(mpc8xx)、smdk2410(arm920t)、sc520_cdp(x86)等目录cpu平台依赖存放CPU相关的目录文件,例如:mpc8xx、ppc4xx、arm720t、arm920t、xscale、i386等目录lib_ppc平台

依赖存放对PowerPC体系结构通用的文件,主要用于实现PowerPC平台通用的函数lib_arm平台依赖存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数lib_i386平台依赖存放对X86体系结构通用的文件,主

要用于实现X86平台通用的函数include通用头文件和开发板配置文件,所有开发板的配置文件都在configs目录下common通用通用的多功能函数实现表3-1U-Boot顶层目录说明lib_generic通用通用库函数的实现Net通用存放网络的程序Fs通用存放文件系

统的程序Post通用存放上电自检程序drivers通用通用的设备驱动程序,主要有以太网接口的驱动Disk通用硬盘接口程序Rtc通用RTC的驱动程序Dtt通用数字温度测量器或者传感器的驱动examples应用例程一些独立运行的应用程序的例子,例如helloworldtools

工具存放制作S-Record或者U-Boot格式的映像等工具,例如mkimageDoc文档开发使用文档U-Boot的编译:U-Boot的源码是通过GCC和Makefile组织编译的。顶层目录下的Makefile首先可以设置开发板的定义,然

后递归地调用各级子目录下的Makefile,最后把编译过的程序链接成U-Boot映像。表3-2U-Boot编译生成的映像文件文件名称说明System.mapU-Boot映像的符号表u-bootU-Boot映像的ELF格式u-boot.binU

-Boot映像原始的二进制格式u-boot.srecU-Boot映像的S-Record格式U-Boot的移植:U-Boot能够支持多种体系结构的处理器,支持的开发板也越来越多。因为Bootloader是完全依赖硬件平台的,所以在新电路板上需要移植U-Boot程序。移植U-Bo

ot的基本步骤如下:(1)在顶层Makefile中为开发板添加新的配置选项。(2)创建一个新目录存放开发板相关的代码,并且添加文件。(3)为开发板添加新的配置文件(4)配置开发板(5)编译U-Boot(6)添加驱动或者功能选项。在能够编译通过的基础上,还要实现U-Bo

ot的以太网接口、Flash擦写等功能。(7)调试U-Boot源代码,直到U-Boot在开发板上能够正常启动。3.2.4VIVI分析VIVI是韩国MIZIResearch公司为其开发的SMDK2410开发板编写

的一款Bootloader。VIVI也有前面说过的两种工作模式,启动加载模式可以在一段时间(这个时间可更改)后自行启动Linux内核,这是VIVI的默认模式。在下载模式下,VIVI为用户提供一个命令行接口,通过该接口可以使用VIVI提供的一些命令

,见表3-3。表3-3VIVI的命令命令功能Load把二进制文件载入Flash或RAMPart操作MTD分区信息Param设置参数Boot启动系统Flash管理Flash配置VIVI使用的命令如下:makedistcle

an;makemenuconfig;编译之前,要先指定Makefile文件中的LINUX_INCLUDE_DIR、CROSS_COMPILE和ARM_GCC_LIBS。配置并保存后,使用"make"命令开始

编译VIVI。VIVI的代码包括arch,init,lib,drivers和include等几个目录,共有200多个文件。VIVI包括下面几个目录。arch:此目录包括了所有VIVI支持的目标板的子目录,这里只有s3c2410目录。drivers:其中包括了引导

内核需要的设备的驱动程序(mtd和串口)。mtd目录下的maps、nand和nor三个目录分别是内存映射、NANDFlash驱动和NORFlash驱动。init:这个目录只有main.c和version.c两个文件

。和普通的C程序一样,VIVI将从main函数开始执行。lib:一些平台公共的接口代码,比如time.c里的udelay()和mdelay()。include:头文件的公共目录,其中的s3c2410.h定义了这块处理器的一些寄存器,以及NANDFlash的一些寄

存器等。platform/smdk2410.h定义了与开发板相关的资源配置参数,我们往往只需修改这个文件就可以配置目标板的参数,如波特率、引导参数、物理内存映射等。3.3嵌入式Linux操作系统内核编译Linux内核是指Linux源代码经过编译和链接生成的映像文件(I

mage)。通常编译嵌入式Linux内核都是通过不同的make命令来实现的,它的执行配置文件就是通常所说的Makefile,而不同的Makefile又通过互相的依赖关系构成一个统一的整体去完成建立依存关系、建立内核等功能。3.3.1Linux

内核结构1、进程调度(SCHED)控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不

可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。2、内存管理(MM)允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保

留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。3、虚拟文件系统(VirtualFi

leSystem,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。4、网络

接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。5、进程间通讯(IPC)支持进程间各种通信机制。各个子系

统之间的依赖关系如下:进程调度与内存管理之间的关系:这两个子系统互相依赖。在多道程序环境下,程序要运行必须为之创建进程,而创建进程的第一件事情,就是将程序和数据装入内存。进程间通信与内存管理的关系:进程间通信子系统要依赖内存管理支持共享内存通信机制,这种机制允许两个

进程除了拥有自己的私有空间,还可以存取共同的内存区域。虚拟文件系统与网络接口之间的关系:虚拟文件系统利用网络接口支持网络文件系统(NFS),也利用内存管理支持RAMDISK设备。内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持交换,交换进程(swapd)定期由调度程序调度,这也

是内存管理依赖于进程调度的唯一原因。当一个进程存取的内存映射被换出时,内存管理向文件系统发出请求,同时,挂起当前正在运行的进程。3.3.2内核的配置Linux内核的配置系统由3部分组成:(1)Makefile:分布在Linux内核源代码中的Makefile,定义Linu

x内核的编译规则;(2)配置文件(config.in):给用户提供配置选择的功能。(3)配置工具,包括配置命令解释器(对配置脚本中使用的命令进行解释)和配置用户界面(提供基于字符界面、基于Ncur

ses图形界面和基于Xwindows图形界面的用户配置界面)。内核配置方法有以下几种:(1)makeconfig:基于文本的最为传统的配置界面,进入命令行,可以一行一行的配置,该方法较烦琐。(2)makemenuconfig:基于文本菜单的配置界

面,是字符终端下常用的方式。(3)makexconfig:基于图形窗口模式的配置界面,Xwindow下推荐使用。(4)makeoldconfig:自动读入“config”配置文件,并且只要求用户设定前次没有设定过的选

项。3.3.3内核编译的过程#makeclean#makedep)#makezImage注意:如果在配置内核时选择了对内核模块的支持,还需要使用如下命令单独地编译内核模块:#makemodules3.3.4内核的移植使某个平台

的代码运行在其他平台上的过程就叫做移植。Linux系统通过移植可以运行在ARM,PowerPC,M68K等多种平台上。linux内核主要由5个子系统组成:进程调度、内存管理、虚拟文件系统、网络接口和进程间通信。一

般在Linux系统中的/usr/src/linux-*.*.*目录下就是内核源代码。Linux内核源代码的分布如下。Linux内核源代码的分布如下。arch:这个子目录包含了此核心源代码所支持的硬件体系结构相关的核心代码。如对于X86平台就是i3

86。include:这个目录包括了核心的大多数include文件。另外对于每种支持的体系结构分别有一个子目录。init:此目录包含核心启动代码。mm:此目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm目录下,如对应于X86的就是arch

/i386/mm/fault.c。drivers:系统中所有的设备驱动都位于此目录中。它又进一步划分成几类设备驱动,每一种也有对应的子目录,如声卡的驱动对应于drivers/sound。ipc:此目录包含了核心的进程间通讯代码。modules

:此目录包含已建好可动态加载的模块。fs:Linux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext2文件系统对应的就是ext2子目录。kernel:主要核心代码。同时与处理器结构相关代码都放在arch/*/kernel目录下。n

et:核心的网络部分代码。里面的每个子目录对应于网络的一个方面。lib:此目录包含了核心的库代码。与处理器结构相关库代码被放在arch/*/lib/目录下。scripts:此目录包含用于配置核心的脚本文件。Documentation:此目录

是一些文档,起参考作用。编译内核①安装内核②清除从前编译内核时残留的.o文件和必要的关联③配置内核,修改相关参数④正确设置关联文件⑤编译内核⑥编译模块⑦安装模块3.4习题与练习1.概念题(1)常见的交叉编译工具有哪些?

(2)针对ARM创建交叉编译环境,其一般步骤是什么?(3)常见的LinuxBootloader有哪些?(4)Bootloader两阶段启动中stage2和stage2的步骤有哪些?(5)移植U-Boot的基本步骤有哪些?3.4思考与练习2.操作题搭建嵌入式开发环境,

包括安装Linux系统、安装嵌入式工具链、配置宿主机相关信息以及和开发板之间的连接等。

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?