1、 东北石油大学 计算机与信息技术学院第4章嵌入式LINUX内核构建 BootLoader概述 BootLoader vivi介绍 移植的基本概念 内核移植的准备 交叉编译工具链的构建 内核移植东北石油大学 计算机与信息技术学院李军:2BOOTLOADER概述 BOOTLOADER:引导加载程序,是系统加电后操作系统内核运行前执行的一段小程序。该程序初始化必要的硬件设备,创建内核需要的一些信息并将这些信息通过相关机制传递给内核,从而将系统的软硬件环境带到一个合适的状态,最终调用操作系统内核。BootLoader是依赖于硬件而实现的,不同体系结构需求的BootLoader是不同的;BootLoad
2、er还依赖于具体的嵌入式板级设备的配置。东北石油大学 计算机与信息技术学院李军:31.BOOTLOADER概述 Bootloader的启动过程单阶段启动:大多数单阶段的BootLoader应用于简单的系统,比如没有操作系统的系统。启动过程通常都用汇编语言来实现,完成如设备初始化等依赖于 CPU 体系结构的工作。两阶段启动:启动过程可以分为stage1和stage 2两部分。stage 1用汇编语言来实现,完成如设备初始化等工作。stage2 则通常用C语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。东北石油大学 计算机与信息技术学院李军:41.BOOTLOADER概
3、述 Boot Loader的stage1:通常包括以下步骤(以执行的先后顺序):硬件设备初始化。为加载 Boot Loader 的 stage2 准备 RAM 空间。拷贝 Boot Loader 的 stage2 到 RAM 空间中。设置好堆栈。跳转到 stage2 的 C 入口点。东北石油大学 计算机与信息技术学院李军:51.BOOTLOADER概述东北石油大学 计算机与信息技术学院李军:61.BOOTLOADER概述 BootLoader的stage2:通常包括以下步骤(以执行的先后顺序):初始化本阶段要使用到的硬件设备。检测系统内存映射(memory map)。将 kernel 映像和根
4、文件系统映像从 flash 上读到 RAM 空间中。为内核设置启动参数。调用内核。东北石油大学 计算机与信息技术学院李军:71.BOOTLOADER概述 BOOTLOADER操作模式:大多数都包含两种不同的操作模式。启动加载(Boot loading)模式和下载(Down loading)模式启动加载模式:称为自主(Autonomous)模式,即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这是BootLoader的正常工作模式。下载模式:目标机的BootLoader通过串口或网络连接等从主机上下载文件,下载的文件通常首先被保存到目标
5、机的RAM中,然后再被写到目标机上的固态存储设备中。这种模式通常在系统更新时使用。这种模式下的BootLoader通常都会向它的终端用户提供一个简单的命令行接口。东北石油大学 计算机与信息技术学院李军:81.BOOTLOADER概述 Boot Loader 的安装媒介系统加电或复位后,所有的处理器通常都从某个预先安排的地址上取指令。比如,ARM在复位时从地址0 x0取指。嵌入式系统中通常都有某种类型的固态存储设备(比如:ROM、EEPROM 或 FLASH 等)被映射到这个预先安排的地址上。因此在系统加电后,处理器将首先执行 Boot Loader 程序 Bootloader是最先被系统执行的
6、程序固态存储设备的典型空间分配结构东北石油大学 计算机与信息技术学院李军:91.BOOTLOADER概述东北石油大学 计算机与信息技术学院李军:102.常用的BOOTLOADER U-Boot:是德国DENX小组的开发用于多种嵌入式CPU的BootLoader程序,它可以运行在基于PowerPC,ARM,MIPS等多种嵌入式开发板上。从:站点可以下载U-Boot的源代码。VIVI:是由韩国MIZI公司开发的专门用于ARM产品线的一种BootLoader。因为VIVI 目前只支持使用串口和主机通信,所以必须使用一条串口电缆来连接目标板和主机。MIZI公司现已被美国风河(wind River)公司
7、收购东北石油大学 计算机与信息技术学院李军:112.常用的BOOTLOADER RedbootRedboot是Redhat公司随eCos发布的一个BOOT方案,是一个开源项目。当前Redboot的最新版本是Redboot-2.0.1,Redhat公司将会继续支持该项目,其官方发布网址为:。Redboot支持的处理器构架有ARM,MIPS,MN10300,PowerPC,Renesas SHx,v850,x86等,是一个完善的嵌入式系统Boot Loader。Blob:是Boot Loader Object的缩写是一款功能强大的BootLoader。其源码在可以获取。Blob最初由Jan-Der
8、k Bakker和Erik Mouw两人为一块名为LART的板子写的,现在Blob已经被成功地移植到许多基于ARM的CPU上。DIY(Do It Yourself),即自己制作。东北石油大学 计算机与信息技术学院李军:123.vivi介绍 vivi:和u-boot类似,支持“启动加载”模式和“下载”模式,同时启动过程也分为Stage1和Stage2两个阶段。Stage1:由/arch/s3C2410/head.s文件开始,主要完成硬件初始化、配置串口、复制自身到SDRAM中、跳转到C代码入口函数等功能。Stage2:由/init/main.c文件开始,主要实现初始化硬件系统、私有数据、内置命令
9、、启动vivi 等。东北石油大学 计算机与信息技术学院李军:133.1 vivi程序架构 vivi程序架构:vivi代码包括arch、init、lib、drivers 和include等几个主要目录。arch:包括了所有vivi支持的 目标板的子目录,这里只有 S3C2410 目录。drivers:包括了引导内核需要的设备 驱动程序。Init:只有main.c和version.c两个文件,vivi将从main.c函数开始c语言的执行。lib:一些平台的接口函数,include:头文件的公共目录,其中,S3C2410的头文件放在该目录下。Platform/smdk2410.h定义了实验系统相关的
10、资源配置参数。其他目录:为一些测试目录或者文挡目录。图:ViVi目录结构东北石油大学 计算机与信息技术学院李军:143.2 vivi常用命令介绍 help命令:帮助指令,可以查看命令集。load命令:完成加载二进制文件到flash或ram。命令格式:load|参数说明:media_type为flash或ram,partname和 二选一,其中partname为预定义的mtd分区。确定文件的传输协议。vivi现在只能使用xmodem协议,所以,”x”是有效的。应用举例:load flash kernel x load flash 0 x80000 0 xc0000 x go命令:跳到指定地址运行
11、该处的程序。命令格式:go addr东北石油大学 计算机与信息技术学院李军:153.2 vivi常用命令介绍 param命令设置参数命令:修改参数值 命令格式:param set 参数名 参数值 举例:param set boot_delay 10000000 保存参数命令:param save 显示参数信息:param show boot命令:启动保存在flash或ram中的linux内核命令格式:boot|参数说明:所有的参数都是可选项。如果省略所有参数,则参数从mtd分区信息的kernel处取得。应用举例:boot:vivi从kernel mtd分区处读到linux内核文件。boot n
12、or 0 x80000:从flash存储器上读取linux内核文件,偏置位置为0 x80000,文件大小为默认值(0 xc0000)boot ram:从ram的0 x30008000中启动linux内核。东北石油大学 计算机与信息技术学院李军:163.2 vivi常用命令介绍 part命令part show:显示mtd分区信息命令part add :填加一个新的mtd 分区。参数说明如下:是新mtd分区的名字;是mtd设备的偏置;是mtd设备分区的大小;是 m t d 设 备 分 区 的 标 志,有 效 值 为JFFS2,LOCKED,BONFS part del:删除mtd分区part re
13、set:复位mtd分区到默认值part save:把参数和mtd分区信息存到flash中东北石油大学 计算机与信息技术学院李军:173.2 vivi常用命令介绍 mem命令:用于对系统的内存进行操作mem size:查看内存长度mem read:从addr读一个字mem write :写value到addrmem cmp :两块内存信息比较mem copy 内存信息复制mem info:显示内存信息mem reset:复位内存控制寄存器mem search 东北石油大学 计算机与信息技术学院李军:184.移植的基本概念 移植:英文为Porting。移植主要是指软件移植,即将一个软件从一个平台迁
14、移到另外一个与其不同的平台上工作。通常情况下,移植分为以下三种情况:从一个硬件平台移植到另外一个硬件平台:比如将基于x86体系的Linux移植到基于ARM体系的嵌入式Linux,主要移植工作包括:工具链的移植:在PC机上建立交叉编译工具链。同时还要考虑binutils、glibc等移植。内核移植:包括arch目录下的体系结构的移植,如从i386移植到arm、驱动程序移植、应用程序的移植。东北石油大学 计算机与信息技术学院李军:194.移植的基本概念从一个操作系统移植到另一个操作系统:这种形式的移植也是最常见的。比如将Windows系统下运行的程序移植到Linux/Unix系统中,这时需要考虑操
15、作系统提供的API,以及所调用的函数库等。从一种软件库环境移植到另一种软件库环境:这种类型的移植也是比较常见的,例如基于Qt 3.0库的应用程序移植到Qt 4.0库环境中去。再如基于glibc库环境的程序移植到基于uclibc库环境。东北石油大学 计算机与信息技术学院李军:205.内核移植的准备 为什么要选择移植Linux内核?平台独立性,它不依赖于某个特定的硬件平台。快速上市,Linux系统的容易移植会大大减少开发时间,从而加快产品上市。低成本,它不但可以节约开发成本,而且也可以节约培训成本。遵循POSIX(Portable Operating System Interface)标准。POS
16、IX的目的就是提升UNIX系统上软件的可移植性,遵循这个标准可以使开发更容易。代码开放性,这是Linux流行的一个重要原因。支持多种硬件,不但支持最新的高性能硬件,同时也支持低价格和早期的微处理和I/O设备。东北石油大学 计算机与信息技术学院李军:215.内核移植的准备准备交叉编译工具链:移植内核首先要准备好编译内核的工具,由于目标板是基于ARM920T内核的S3C2410处理器,需要能够编译出在ARM处理器上可以运行的程序,这时就需要交叉编译链了。准备内核代码:从站点下载要移植的内核代码,这里下载的内核代码为linux-2.6.10.tar.gz。准备开发板硬件:检查要移植的开发板硬件是否准
17、备就绪,当所有这些基本条件准备好后,就可以正式移植内核了。东北石油大学 计算机与信息技术学院李军:226.交叉编译工具链的构建 交叉编译器:就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序。和其对应的为本地编译,在当前平台编译,编译得到的程序也是在本地执行。组成:交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境。主要由 binutils、gcc 和 glibc 三个部分组成。创建方法:有三种 分步构建交叉编译链:分步编译和安装交叉编译工具链所需要的库和源代码,最终生成交叉编译工具链。此方法最复杂。通过Crosstool脚本工具来实现一次编译生成交叉编译工具链,此方法
18、相对简单。直接通过网上()下载已经制作好的交叉编译工具链。东北石油大学 计算机与信息技术学院李军:236.1 分步构建交叉编译链 分步构建,就是一步一步的建立交叉编译链。采用该方法有利于深入理解构建交叉编译器过程以及各个工具包的作用。但相对来说难度较大、时间较长。主要步骤如下:建立工作目录建立环境变量编译、安装Binutils获得内核头文件编译安装boot-trap gcc建立glibc库编译安装完整的gcc测试交叉编译工具链 东北石油大学 计算机与信息技术学院李军:246.2 用Crosstool工具构建交叉工具链 Crosstool 工具介绍:Crosstool是一组脚本工具集,构建和测试
19、不同版本的gcc和glibc,用于那些支持glibc的许多体系结构。下载地址:。用Crosstool构建所需资源(以2.6.10内核为例)安装包下载地址crosstool-0.42.tar.gzlinux-2.6.10.tar.gzbinutils-2.15.tar.bz2gcc-3.3.6.tar.gzglibc-2.3.2.tar.gzglibc-linuxthreads-2.3.2.tar.gzlinux-libc-headers-2.6.12.0.tar.bz2东北石油大学 计算机与信息技术学院李军:256.2 用Crosstool工具构建交叉工具链 用Crosstool工具构建过程准
20、备资源文件:从网上下载上表资源文件到/home/lijun/downloads,在/home/lijun目录下解压crosstool-0.42.tar.gz 建立脚本文件:建立自己的编译脚本,可起名为arm.sh,为了简化编写arm.sh,寻找一个最接近的脚本文件demo-arm.sh作为模版并修改。修改后的arm.sh的脚本内容如下#!/bin/shset-exTARBALLS_DIR=/home/lijun/downloadsRESULT_TOP=/opt/crosstoolexport TARBALLS_DIR RESULT_TOPGCC_LANGUAGES=c,c+export GCC
21、_LANGUAGESmkdir-p$RESULT_TOPeval cat arm.dat gcc-3.3.6-glibc-2.3.2.dat sh all.sh-notestecho Done.东北石油大学 计算机与信息技术学院李军:266.2 用Crosstool工具构建交叉工具链建立配置文件:在arm.sh脚本文件中,arm.dat和gcc-3.3.6-glibc-2.3.2.dat作为crosstool编译的配置文件。arm.dat主要用于定义配置文件,指定生成编译工具链的名称以及定义编译选项等。主要内容如下:KERNELCONFIG=pwd/arm.config#内核的配置 TARGE
22、T=arm-linux-#编译生成的工具链名称 TARGET_CFLAGS=“-O”#编译选项 gcc-3.3.6-glibc-2.3.2.dat文件主要定义编译过程中所需要的库以及它定义的版本,如果在编译过程中发现有些库不存在时,crosstool会自动在相关网站上下载。主要内容如下:东北石油大学 计算机与信息技术学院李军:276.2 用Crosstool工具构建交叉工具链BINUTILS_DIR=binutils-2.15GCC_DIR=gcc-3.3.6GLIBC_DIR=glibc-2.3.2GLIBCTHREADS_LINUX_DIR=linux-2.6.10LINUX_SANITI
23、ZED_HEADER_DIR=linux-libc-headers-2.6.12.0 执行脚本:将Crosstool的脚本文件和配置文件准备好之后,开始执行arm.sh脚本来编译交叉编译工具。经过数小时的漫长编译之后,会在/opt/crosstool目录下生成新的交叉编译工具。具体执行命令如下:cd crosstool-0.42./arm.sh 东北石油大学 计算机与信息技术学院李军:286.2 用Crosstool工具构建交叉工具链 添加环境变量:将生成的编译工具链路径添加到环境变量PATH上去,添加的方法是在系统/home/lijun/.bashrc文件中添加下面一行在文件的最后 expo
24、rt PATH=/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin:$PATH 测试工具链:设置完环境变量,即完成了交叉编译工具链构建,可以对刚刚建立的工具链进行测试。测试指令如下:arm-linux-gcc o hello hello.c hello:ELF 32-bit LSB executable,ARM,version 1(ARM),for GNU/Linux 2.4.3,dynamically linked(uses shared libs),not stripped 东北石油大学 计算机与信息技术学院7.内核移植 内核配置 内核编译
25、 内核下载 东北石油大学 计算机与信息技术学院李军:307.1 Linux内核源代码目录结构 arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录。如arm、avr32、blackfin、mips等。crypto:常用的加密和离散算法,还有一些压缩和CRC校验算法 documentation:内核的说明文档。drivers:设备驱动程序,其下细分为不同种类的设备。如block、char、mtd、net、usb、video等等。fs:内核支持的文件系统的实现,如ext2、ext3、cramfs、jffs2、nfs等。东北石油大学 计算机与信息技术学院李军:317.1 Linux内核源
26、代码目录结构 include:头文件。与系统相关的头文件放在include/linux下,与ARM体系结构相关的头文件放在include/asm-arm下。init:内核初始化代码。ipc:进程间通信代码。kernel:内核的核心代码,包括进程调度、定时器等。和arm平台相关的核心代码在arch/arm/kernel目录下。lib:库文件代码 mm:内存管理代码,和arm平台相关的内核管理代码在arch/arm/mm目录下。东北石油大学 计算机与信息技术学院李军:327.1 Linux内核源代码目录结构 net:网络相关的代码,实现了各种常见的网络协议。scripts:包含用于配置内核的各种脚
27、本文件。只在配置时是有意义的。sound:音频设备驱动的通用代码和硬件驱动代码都在这个文件件下面。东北石油大学 计算机与信息技术学院李军:337.2 Linux内核启动方案 Linux内核有两种映像:非压缩内核Image压缩内核zImage 嵌入式系统存储容量有限,因此通常选择压缩内核zImage。要使用压缩内核zImage,需要在映像开头加入解压缩代码,将zImage解压后,才可以执行。zImage的构成:内核编译完成后,会在arch/arm/boot目录下生成zImage文件。zImage文件的组成:pggy.o:压缩后的内核文件head.o:系统初级初始化代码文件misc.o:解压缩代码
28、文件东北石油大学 计算机与信息技术学院李军:347.3 Linux内核的配置 关于Makefile:Linux内核源码的每个目录下都有一个Makefile,由该Makefile对源代码的编译、链接等操作进行控制。编译完成后,每个源代码目录下都会生成一个名叫built-in.o的文件。这个文件由源代码目录下的所有源文件编译后的目标文件链接而成;而不同的built-in.o又被上层目录中的Makefile链接成更大的built-in.o,直到最后链接成为一个内核vmlinux.o。关于交叉编译:由于目标平台是ARM,而在x86平台上进行开发,故必须进行交叉编译。修改内核的顶层Makefile如下,
29、表示我们的目标平台是ARM构架的,而使用的交叉编译器的前缀是arm-linux-ARCH?=armCROSS_COMPILE?=arm-linux-东北石油大学 计算机与信息技术学院李军:357.3 Linux内核的配置 关于kconfig(2.4内核是config.in):在进行make menuconfig时,所属目录源文件相关内核配置菜单的生成依赖于kconfig文件。一般来说,每个源代码目录下都有一个kconfig文件。config DM9000tristate DM9000 support“depends on ARM|BLACKFIN|MIPSselect CRC32select
30、MII-help-Support for DM9000 chipset.To compile this driver as a module,choose M here.The module will be called dm9000.东北石油大学 计算机与信息技术学院李军:367.3 Linux内核的配置 关于.config文件:这是linux编译时所依赖的文件。我们在配置内核时所做的任何修改,最终都会在这个文件中体现出来。它是Makefile对内核进行处理的重要依据。一般来说,内核提供了芯片公司demo板的.config文件,我们一般找一个近似的进行 修 改。如 S 3 C 2 4 1 0
31、 平 台 上 可 以 选 择s3c2410_deconfig这个文件。东北石油大学 计算机与信息技术学院李军:377.3 Linux内核的配置 内核的四种配置方式make config:基于文本对话的配置方式,比较细致,但是浪费时间。对专业的内核开发人员比较合适。make xconfig:基于图形界面的配置方式。非常直观,但是需要特殊的软件支持,一般不推荐。make menuconfig:推荐的内核配置方式,采用目录的方式,直观,容易使用。需安装软件包libncurses-dev。make oldconfig:如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦。东北石油大学 计算机与
32、信息技术学院李军:387.3 Linux内核的配置 内核移植的大体步骤修改内核的顶层Makefile如下:ARCH?=armCROSS_COMPILE?=arm-linux-针对特定的CPU及开发板硬件,修改相关的程序源文件。(因较复杂,略)在内核根目录下,运行make menuconfig命令,配置相关的硬件及资源。配置内核选项是移植内核过程中重要且复杂的一步。由于当前的开发板很接近Linux内核中提供的smdk2410开发板,所以可以参考smdk2410开发板的配置文件,将其默认的配置文件拷贝到内核代码的根目录下,然后开始配置内核。结束语当你尽了自己的最大努力时,失败也是伟大的,所以不要放弃,坚持就是正确的。When You Do Your Best,Failure Is Great,So DonT Give Up,Stick To The End感谢聆听不足之处请大家批评指导Please Criticize And Guide The Shortcomings演讲人:XXXXXX 时 间:XX年XX月XX日
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。