2022年嵌入式linux系统开发手册 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年嵌入式linux系统开发手册 .pdf》由会员分享,可在线阅读,更多相关《2022年嵌入式linux系统开发手册 .pdf(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、嵌入式 Linux 系统开发手册郭万永(yong_)2003-6-23 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 35 页 -目录引言第一章 嵌入 linux简介11 嵌入 linux发展12 嵌入 linux开发步骤简介13 嵌入 linux开发模型第二章 嵌入 linux开发前期准备工作21 主机系统211 安装开发编译环境212 配置 DHCP 213 配置 TFTP 214 配置 NFS 22 目标系统23 软件包获取第三章 PPCBOOT/U-BOOT的移植31 PPCBOOT/U-BOOT简介32 U-BOOT源代码分析321 与目标板相关的代码322 与 CP
2、U 相关的代码323 头文件334 公共代码335 网络传输代码336 Makefile文件337 关键的驱动程序文件33 移植步骤331 编译测试332 U-BOOT 的启动过程333 添加自己的开发配置文件334 目标板系统参数配置335 串口初始化336 SDRAM 初始化337 FLASH驱动338 FEC以太网口初始化339 其它34 编译调试341 编译342 目标代码烧写343 调试名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 35 页 -35 U-BOOT命令36 小结第四章 嵌入 Linux 的移植41 整体分析411 平台支持412 组件支持413 文件系统
3、414 网络支持42 内核源代码简单分析43 重要代码说明及修改431 串口驱动432 FLASH驱动及 MTD 支持433 FEC以太网口驱动44 内核编译控制441 内核编译442 内核调试选项45 内核的装载46 引导嵌入 Linux 系统47 关于文件系统471 简介472 嵌入 Linux 文件系统分析473 DOC支持474 实例分析在 FLASH 上构造 JFFS2文件系统48 小结第五章 应用程序开发51 简介52 实例:TCP SERVER 及 CLIENT 第六章 SNMP 的实现第七章 WEB的支持名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 35 页 -
4、名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 35 页 -引言:本手册结合MPC860T 硬件平台,详细叙述了PPCBOOT/UBOOT以及嵌入 Linux 的移植过程,介绍了 SNMP 和 WEB 组件在嵌入平台上的移植过程,同时这也可以作为在其它硬件平台上移植嵌入 Linux 的参考手册。鉴 于 篇 幅 有 限,本 文 将 不 会 列 出 所 涉 及 的 源 代 码,主 要 目 的 是 是 讨 论 进 行PPCBOOT/UBOOT和嵌入 Linux 移植的步骤和通常做法,不会对源代码做过多解释叙述。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 35 页 -第
5、一章嵌入 linux简介11 嵌入 linux的发展伴随着 linux的快速成长,嵌入 linux在近两年也发展迅速,与传统商业性操作系统象vxworks、psos 等相比,嵌入linux没有昂贵的版权费,而且完全开放源代码,在internet上有着丰富的开发资源,支持众多CPU架构象 PPC、COLDFIRE、ARM、X86、MIPS,这些有点吸引了众多的商家投入linux的怀抱。与 vxworks 等典型嵌入操作系统相比,实时性是Linux 的弱项,因此一些公司对linux进行了二次包装,以提高嵌入linux的实时性,比较优秀的嵌入linux有 Montavista公司的 Hardhat
6、Linux,还有 RTLinux、Bluecat Linux等。优秀的网络性能是linux的招牌,嵌入 linux同样对网络有着良好的支持,支持 TCP/IP、PPP、IGMP、IPV6,而且提供了对ATM协议的支持。12 嵌入 linux的开发步骤嵌入 linux的移植开发是一项很有趣的工作,在开发的过程中会感受到linux强大的吸引力。首先我们以我们常见的PC来描述一下整个系统的工作流程。从打开电源的一刹那,你的 CPU就开始了第一次心跳(上电复位),然后 CPU会迈出自己的第一步跳向指令的入口地址,通常是在EEPROM,FLASH ROM 等永久记忆体当中,然后CPU就会按部就班的进行对
7、自身进行最初的初始化工作,通常这些工作都是由汇编代码完成的,因为有一些寄存器只有用汇编语言才可以进行读写。一旦跳到C 语言的领域,一切变的明朗起来,无非就是对外围设备的初始化,对DRAM/SDRAM 的初始化,对串口、网口等初始化,对总线设备的初始化等,不过虽然说起来容易,但事实上非常复杂,因为你要对你的所有硬件设备都很了解,这些工作完成之后就要将接力棒传给Linux的内核了,上面的工作就是我们常说的计算机BIOS 所要做的工作,在嵌入Linux系统中我们给它取了新的名字,BSP(board support package)板级支持包,Bootloader引导者。BIOS的工作完成之后就会将C
8、PU完整的交给Linux kernel,此时 BIOS的使命就结束了,剩下的就是linux内核启动,加载设备驱动程序,初始化网络协议,启动系统服务象FTP,WEB,SNMP 等,详细的过程在随后的章节中在叙述。怎么样,我想现在大概有个简单的概念了吧!嵌入 linux系统从在这里我们暂且把它分为三个大部分:硬件系统、bootloader和 linux kernel,他们的关系如下图:图 1 嵌入 linux系统概念图按照这个概念图来说,我们的开发步骤很简单:设计自己的硬件系统名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 35 页 -编写 bootloader 裁减自己的 linu
9、x内核是不是太简单了,别着急,后面几章会一一把他们分解开来详细叙述。1 3 嵌入 linux开发模型通常嵌入 linux的开发分为主机系统和目标系统,他们之间通过网络接口和串口互连,网口一般用以下载程序和内核映象文件,串口一般作为console 控制台来使用,在主机通过超级终端与目标系统进行命令交互,就像PC的键盘和显示器。如果你第一次接触嵌入系统,可能会问什么是主机系统和目标系统?很简单,主机系统就是我们一般用的计算机或者工作站,用来编写代码和编译;目标系统就是你的嵌入开发系统中的硬件板。在主机开发好的目标执行代码通过网络接口或者烧写到目标系统中的永久记忆体(通常是flash或者 DOC D
10、isk On Chip),目标系统执行这些代码。模型如下图所示:图 2 嵌入 linux系统开发模型很简单吧,不过要注意,虽然需求很少,但有两个必要:主机至少要有一个232 的通用串口(有些笔记本上却没有),还要有一个10M或 100M的以太网口(关键看你的目标系统是那种网络接口),然后还有一根串口线和两根网线,如果不用HUB的话,一根单机对联线就解决问题了。硬件系统这样就搞定了!名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 35 页 -第二章嵌入 linux开发前期准备工作硬件系统搞定之后,还有一些软件的准备工作,俗话说“磨刀不误砍柴功!”,在未进行正式的开发工作之前,对系统
11、有个全面的认识,做好充足的准备,会避免好多后期将可能会出现的问题。21 主机系统前面我们讲过,主机系统通常就是我们使用的计算机或工作站,当然操作系统要是Linux,这里我的主机系统为硬件配置为:CPU:PIII550 SDRAM:256MB HARDDISK:20G 100M快速以太网卡一块,通用串行232 接口操作系统:Redhat Linux8.0 完全安装211 安装开发编译环境主机准备好之后还要安装交叉编译环境,用于编译目标系统可执行的代码。为什么要这个交叉编译环境呢?大家知道一般我们用的PC CPU的架构为X86,我们的目标系统为8XX架构的,所以要有一个编译器,链接器用于将C语言的
12、代码编译为8XX系统可识别的目标代码。你完全可以自己建立嵌入linux的交叉编译环境,可是有点烦琐,所以如果你有Montavista的 CDK,那么是最好的选择了,如果没有,也可以到德国的DENX 软件中心的FTP站点上下载他们的ELDK。这里以CDK为例,安装很简单,执行一个简单的Install即可,安装完成之后会在一个固定的目录下多了一些可执行文件,以 8xx 系统为例,在*/bin/下会有 ppc_8xx-gcc ppc_8xx-objcopy ppc_8xx-ld等。ELDK的安装相对也很简单,下载它的ELDK,实际是一个编译控制文件Makefile,你要将所需要的源代码(一般为tar
13、格式的)下载之后放到它指定的目录中,然后执行make,如果没有什么错误,就会在根目录下产生一个新目录LinuxPPC,里面就是产生的编译器连接器的执行文件。这里不再详细叙述了,相关的说明可以在他们的Readme中看到。安装好之后可以用“which ppc_8xx-gcc”来查找一下产生的目标执行文件在哪里,如果告诉你没有发现,那么很不幸你的安装没有成功(当然,首先你要将路径加到系统路径中)。212 配置 DHCP 主机系统需要设置DHCP 服务器,用于目标系统在采用BOOTP 启动时获取IP 地址。设置之前首先要知道目标系统的MAC 地址,同时要保证主机系统安装了DHCPD 服务器。下面是一个
14、典型配置,在/etc/dhcpd.conf文件中:ddns-update-style none;allow bootp;subnet 200.162.162.0 netmask 255.255.255.0 default-lease-time 1209600;max-lease-time 31557600;group 名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 35 页 -host linux-8xx hardware Ethernet 08:00:3e:26:9d:5b;fixed-address 200.162.162.190;option root-path“/dev/
15、nfs”;用如下命令重新启动dhcpd 服务:#/etc/init.d/dhcpd restart 同时启动 dhcpd 服务,使主机每次启动时自动启动该服务。213 配置 TFTP服务器 TFTP(简单文件传输协议)服务器用于目标系统从主机系统上获取可执行的代码或内核映象文件。以超级用户登录主机系统,编辑下面文件:#vim/etc/xinetd.conf 去掉下面一行的注释:tftp dgram udp wait root/usr/sbin/tcdp in.tftpd 根目录下创建tftpboot目录:#mkdir tftpboot 将每次编译好的目标代码拷贝到该目录下,在系统服务中启动TF
16、TPD服务。(运行#setup,在“System services”中选择。)然后重新启动系统即可。214 配置 NFS NFS在我们的开发系统中主要是给目标系统提供一个根文件系统(Root Filesystem)。首先,编辑配置文件/etc/exports:#cd/etc#vim exports 如果原来不存在,添加一行:/opt/nfsfilesystem/*(rw,insecure,sync,no_root_squash)“/opt/nfsfilesystem/”是根文件系统所在的目录,“*”允许主机所在网段所有机器访问。和配置 TFTP一样,在系统服务中启动nfs 服务,重新启动系统或
17、运行:#/etc/init.d/nfs restart 至此,主机配置基本完毕,前期的准备工作基本搞定,还有一些小工作要做!22 目标系统目标系统就是我们的开发板,我们用的是自己开发的MPC860T 开发板的一个最小系统。一般的最小系统要包括以下几个方面:CPU肯定是要有的了;SDRAM/DRAM 最好 32M或更大(反正这东西便宜);FLASH或者 DOC:FLASH最好 8M或更大,这样可以建立一个可读写的文件系统,DOC最大可以到 100 多 MB,也是不错的选择。以太网口,当然你不要也可以,从串口下载程序吧!名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 35 页 -串口
18、,这可是必须的!我们的目标系统如下:CPU:MPC860T 80MHz SDRAM:32MB FLASH:8/16MB 网口:FEC 100Mb 串口:rs232 X 2 目标系统硬件没什么可以说的,很简单!这里提一下一个比较重要的问题,要做好整个系统的地址分配,这在后面会用到!23 软件包获取最后要获取相关的软件开发包,假设你什么也没有,那么去DENX 的 FTP看看,基本可以满足需要了:ftp.denx.de.主要获取以下软件包:某个版本的PPCBOOT/UBOOT源代码ELDK(如果你有CDK,这就不用了)某个版本的LINUX KERNEL 下载这些软件包之后在某个目录下解压,以我们的为
19、例:下载 u-boot0.2.0.tar.bz2到目录/opt;解压:#cd/opt#bzip2 cd u-boot0.2.0|tar xf 解压完成之后会产生一个目录“u-boot-0.2.0”。内核的解压和这差不多。当然,在 Internet上有很多可以获取这些代码的地方,这里不一一列举了,举几个网站的例子:http:/penguinppc.org/http:/qslinux.org/http:/lists.linuxppc.org/http:/ 10 页,共 35 页 -第三章 PPCBOOT/U-BOOT 的移植31 PPCBOOT/U-BOOT 简介 ppcboot的前身是8XXRO
20、M 和 FADSROM,其最高版本为PPCBOOT2.0,2.0 版本以后名称就改为了 U-BOOT,是由德国 DENX软件中心依照GPL发布的公共软件,本手册我们结合所用的u-boot-0.2.0(其版本划分为 u-boot-*.*.*,分别为 version.subversion.patchlevel)来详细叙述整个的porting过程。我们所用的版本为u-boot-0.2.0,支持 BOOTP,TFTP,SERIAL代码下载,后续版本可以引导OpenBSD,NetBSD,FreeBSD,4.4BSD,Linux,SVR4,Esix,Solaris,Irix,SCO,Dell,NCR,Vx
21、Works,LynxOS,pSOS,QNX内核映象,目前支持NetBSD,Linux,Vxworks 和 QNX;支持的目标CPU架构 Alpha,ARM,Intel x86,IA64,MIPS,MIPS,PowerPC,IBM S390,SuperH,Sparc,Sparc 64 Bit,目前支持PowerPC。详细的说明可以参见 U-BOOT 目录下的 README 文件。32 U-BOOT源代码分析经过漫长的准备工作,现在终于可以进行实质性的工作了!首先我们来分析一下U-BOOT的源代码分布,这样才可以做到“知己知彼,百战不殆”!首先列出它的源码树(图3),然后再解剖它。321 与目标板
22、相关的代码目前 U-BOOT 支持大多数比较常见的目标板,象MOTOROLA的 ADS和 FADS板,一般我们设计的主板和这些主板都是大同小异,不会有太大的差别。源代码树中board/下的每个文件夹对应一个或几个主板,象/board/fads目录对应的就是FADS板和 ADS板的源代码,一些主板上的资源例如SDRAM 和 FLASH的初始化代码就在这个文件夹中。322 与 CPU相关的代码该版本的 U-BOOT 只支持 PowerPC系列的主板,与 CPU 相关的代码未于源代码树下的CPU/下的各个目录当中,例如我们用的相关CPU的代码就位于/cpu/mpc8xx/文件夹中,其中start.S
23、是 U-BOOT 的入口代码,用汇编语言写的,是整个代码的入口,serial.c是串口的初始化代码。相应的,目录/cpu/mpc8260/对应的就是8260CPU的相关代码。323 头文件头文件位于源码树下的include/下,其中各种主板的配置文件位于/include/configs/文 件 夹 中,象FADS860T 主 板 的 配 置 文 件 为/include/configs/FADS860T.h;目 录/include/asm-ppc是 一 些 比 较 底 层 的 头 文 件,编 译 时 会 根 据 不 同 的 配 置 与/include/configs/asm建立一个符号链接。32
24、4 公共代码除了和主板,CPU特性相关的代码外,其他大部分都是公用的代码,位于/common/下面,象 U-BOOT的命令解析代码/common/command.c,U-BOOT环境变量处理代码environment.c等都位于该目录下。还有一个公共的代码就是PowerPC系列的主板初始化代码也是公用的,位于/lib_ppc/board.c中,在完成CPU的初始化之后就会跳到这个文件中,而与主板相关代码的执行都是在这个文件中调用的。名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 35 页 -图 3 U-BOOT源代码树335 网络传输代码网络传输代码位于目录中的/net/下面,
25、象 arp.c,bootp.c,eth.c,tftp.c等都在这里,BOOTP,TFTP,以太网初始化等功能的实现也是由这些代码完成的336 Makefile文件 Makefile文件位于 U-BOOT 的根目录下,是整个编译的控制主文件,后面我们会讲到如何修改该文件以添加我们自己主板的编译控制。337 关键的驱动程序文件 U-BOOT中几个比较关键的外设驱动代码包括串口的初始化,以太网口驱动,SDRAM 初始化,FLASH初始化,以FADS板为例,分别位于:串口:/cpu/mpc8xx/serial.c 名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 35 页 -SDRAM:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年嵌入式linux系统开发手册 2022 嵌入式 linux 系统 开发 手册
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内