单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,教学内容,第一章 嵌入式系统概述,第二章 学习板硬件及开发环境的建立,第三章,构建嵌入式Linux系统,第四章 嵌入式Linux设备驱动,第五章 嵌入式Linux串口和网络编程,第六章 嵌入式Linux图形编程,Monday,October 28,2024,第三章 构建嵌入式Linux系统,3,.1,嵌入式Linux系统的构建流程,3,.2,Bootloader,3,.3,Linux内核,3,.4,根文件系统,3.5,构建,9200,的嵌入式,Linux,系统,Monday,October 28,2024,3,.1 嵌入式Linux系统的构建流程,嵌入式Linux的组成,嵌入式Linux的构建,Monday,October 28,2024,嵌入式Linux的组成,嵌入式Linux由以下三个部分组成为:,Bootloader(引导加载器),内核,根文件系统,Monday,October 28,2024,嵌入式Linux的构建,在嵌入式Linux的构建中,Bootloader和Linux内核一般都有相对成熟的代码。
主要的工作有两步:,第一步是根据本系统硬件平台的状况进行,移植,;,第二步是,交叉编译源代码,进行编译,形成运行时需要的映象(Image)文件Monday,October 28,2024,嵌入式Linux的构建,Bootloader的移植,Monday,October 28,2024,嵌入式Linux的构建,Linux内核的移植,Monday,October 28,2024,嵌入式Linux的构建,Linux内核的启动并不依赖于根文件系统(rootfs),但是要保证Linux内核的正常运作,还是需要根文件系统的支持在构建系统的过程中需要为系统生成根文件系统的映像文件,让Linux内核在启动的时候挂接(mount)根文件系统Monday,October 28,2024,3.2 Bootloader,嵌入式linux的引导方式,Bootloader的作用,Monday,October 28,2024,嵌入式linux的引导方式,启动加载(Boot Loader)模式,:,启动加载模式也称为“自主”(Autonomous)模式在这种情况下,Boot Loader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。
下载(Downloading)模式,:,在下载模式中,目标机上的 Boot Loader 将通过串口连接或网络连接等通信手段从主机(Host)下载文件工作于这种模式下的 Boot Loader 通常都会向它的终端用户提供一个简单的命令行接口Monday,October 28,2024,嵌入式linux的引导方式,根据所使用的存储介质和开发阶段的不同,可以采用不同的系统引导方式:,使用可固化存储设备(如,FLASH,),使用磁盘设备,通过网络引导,Monday,October 28,2024,Bootloader的作用,Bootloader是系统启动后首先运行的程序,对于嵌入式linux操作系统的Bootloader,其最基本的功能是加载linux的内核并运行Bootloader一般还具有以下的功能:,通讯功能,FLASH,相关功能,用户接口功能,Monday,October 28,2024,3.3 Linux内核,Linux,内核配置和编译的流程,Linux,内核配置,Linux,内核的编译,Monday,October 28,2024,Linux内核配置和编译的流程,Linux内核从配置到安装大致有如下步骤:,配置内核:最常见的命令为,make,menuconfig,建立依赖关系:最常见的命令为,make,dep,编译内核:最常见的命令为,make 或 make,zImage,编译内核模块,:最常见的命令为,make modules,安装内核模块,:最常见的命令为,make,modules_install,安装内核:最常见的命令为,make install,Monday,October 28,2024,Linux内核配置和编译的流程,在内核源代码目录下输入“make XXXconfig”等命令之一就可以对内核进行配置:,make,config,提供了一个命令行界面,然后对每一个内核选项依次询问用户的选择。
make,menuconfig,提供了一个基于终端,curses,的图形界面配置菜单apt-get install libncurses5-dev),make,xconfig,提供了一个基于,GTK,的,X Window,图形界面配置菜单make,oldconfig,和,make,config,类似,不过它只提示用户设置之前没有配置过的选项make ARCH=arm CROSS_COMPILE=arm-linux-menuconfig,Monday,October 28,2024,Linux内核配置,内核都会在配置完后生成一个.config文件,还会产生大量的符号连接和头文件,这些在其余的创建过程中会用到config 文件中保存了根据在menuconfig中的选择定义的相应变量,在Linux内核目录下的Makefile文件中将会包含这个文件重要的内核选项包括:,Code maturity level options,(内核成熟级别选项),Loadable module support,(可加载模块支持),General setup,(通用设置),Memory technology devices,(内存技术设备),Block devices,(块设备),Network device support,(网络设备支持),Character devices,(字符设备),Filesystems,(文件系统),Console drivers,(控制台驱动),Monday,October 28,2024,Linux内核的编译,建立内核依赖关系(不再需要这个步骤):,#make dep,编译内核:,#make zImage,或者,#make,单独地编译内核模块:,#make modules,如果编译成功,所生成的内核映像文件将放置在arch/$ARCH/boot目录下,对于ARM 架构来说就是 arch/arm/boot 目录。
Monday,October 28,2024,3.4 根文件系统,Linux,下的文件系统,嵌入式,Linux,的文件系统介绍,Linux,的根文件系统,Monday,October 28,2024,Linux下的文件系统,在UNIX系统中,文件系统是最基本的资源在系统内核和文件系统之间制定一个标准的接口而实现的,不同文件结构之间可以通过该接口方便地交换数据Linux正是使用这种方式,在系统内核和文件系统之间提供了一种标准接口VFS(virtual file system,虚拟文件系统)Linux下的文件系统,由虚拟文件系统和实际的文件系统两个层次组成目前常用的有EXT2、CRAMFS、JFFS2、NFTL、NFS和RAM 磁盘文件系统等Monday,October 28,2024,Linux下的文件系统,文件系统,写入,可更新,掉电可靠性,可压缩,RAM启动,Romfs,No,N/A,N/A,No,No,CRAMFS,No,N/A,N/A,Yes,No,JFFS2,Yes,Yes,Yes,Yes,No,JFFS,Yes,Yes,Yes,No,No,EXT2 over NFTL,Yes,Yes,No,No,No,EXT3 over NFTL,Yes,Yes,Yes,No,No,EXT2 over RAM disk,Yes,No,No,No,Yes,Monday,October 28,2024,嵌入式Linux的文件系统介绍,在嵌入式Linux中,常见的文件系统有以下几种:,EXT2/3,(扩展文件系统,2/3,),ROMFS,(,Read Only Memory File System,,只读文件系统),CRAMFS,(,Compress Read Access Memory File System,,压缩只读文件系统),JFFS2,(,Jounaling,FlashFilesystem,2,,日志文件系统,2,),NFS,(,Net File System,,网络文件系统),YAFFS,(,Yet Another,FlashFile,System,,另一种,FLASH,文件系统),Monday,October 28,2024,Linux的根文件系统,Linux 的根文件系统的主要目录:,/bin,:包含基本的用户命令工具程序,/,sbin,:包含基本的系统管理程序,/boot,:包含内核映像及启动相关文件,/etc,:(,excutive,time,config,)包含系统配置文件和脚本,/lib,:包含系统库和内核模块,/,usr,:用户程序及库目录,/home,:用户主目录,/root,:,root,用户主目录,/dev,:设备文件目录,目录下的每个文件代表一个设备,/opt,:额外软件包所在目录,/,mnt,:文件系统临时挂装目录,/,var,:包含运行时改变的文件,例如,lock,和,log,文件,/proc,:内核创建和使用的虚拟文件系统,存放运行时系统信息,/,tmp,:临时文件目录,Monday,October 28,2024,3.5 构建9200的嵌入式Linux系统,0 x1000 0000,0 x1001 FFFF,大小:0 x20000 128KB,boot.bin,0 x1002 0000,0 x1003 FFFF,大小:0 x20000 128KB,0 x1004 0000,0 x1005 FFFF,大小:0 x20000 128KB,u-boot环境变量,Linux Kernel,0 x1006 0000,0 x1045 FFFF,大小:0 x400000 4MB,cramfs根文件系统,0 x1046 0000,0 x1085 FFFF,大小:0 x400000 4MB,用户可用空间,0 x1086 0000,0 x10FF FFFF,大小:0 x7A0000 8MB-384KB,Bootloader,第一级,第二级,JFFS2 or YAFFS,文件系统,rootfs根文件系统,Linux 2.6.38 内核,(只读),(可读可写),16MB NorFlash,Monday,October 28,2024,1 boot.bin的移植,#define BOOT_VERSIONBoot 1.1 for CUGB,#define SRC 0 x10020000 /u-boot压缩文件在Flash中的地址,#define DST 0 x21f00000 /u-boot.bin运行地址,#define LEN 0 x020000 /u-boot压缩文件长度,作用,初始化硬件:CPU CLK;SDRAMC;EBI,运行u-boot.bin,从Flash中解压至SDRAM中,A 修改boot/main.c文件,B 修改boot/Makefile文件,指定交叉编译器,C 执行make命令开始交叉编译,步骤,BootLoader,Monday,October 28,2024,2 u-boot的移植,作用,进一步初始化硬件:USB;Ethernet,运行Linux Kernel,提供下载、文件烧写等工具:loadb;tftp;cp.b;erase;nand;bootm,A 下载 u-boot-1.3.4 源码包,D 修改Makefile文件,指定交叉编译器,ifeq($(ARCH),arm),CROSS_COMPILE=arm-softfloat-linux-gnu-,E,mak。