嵌入式系统原理与应用-基于Cortex-A53微处理器 课件 第7章 Linux系统移植_第1页
嵌入式系统原理与应用-基于Cortex-A53微处理器 课件 第7章 Linux系统移植_第2页
嵌入式系统原理与应用-基于Cortex-A53微处理器 课件 第7章 Linux系统移植_第3页
嵌入式系统原理与应用-基于Cortex-A53微处理器 课件 第7章 Linux系统移植_第4页
嵌入式系统原理与应用-基于Cortex-A53微处理器 课件 第7章 Linux系统移植_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统原理与应用电子与电气工程学院第七章Linux系统移植教师:程蔚正大气象厚德载物MinnanUniversityofScienceandTechnology目录CONTENTS01.U-Boot编译与移植02.Linux编译与移植03.Linux文件系统制作正大气象厚德载物MinnanUniversityofScienceandTechnology01PARTONE嵌入式系统简介正大气象厚德载物MinnanUniversityofScienceandTechnology正大气象厚德载物MinnanUniversityofScienceandTechnology一、BootLoader介绍二、S5p6818启动方式三、Uboot移植四、Uboot命令U-Boot编译与移植

S5p6818启动正大气象厚德载物MinnanUniversityofScienceandTechnology一、BootLoader介绍BootLoader系统启动引导程序,主要作用:搬移内核(系统)到内存中执行。分类标准说明针对不同CPU架构1、针对X86架构的有LIL0、GRUB、ntldr等针对不同2、针对ARM架构的有vivi、armboot等CPU架构3、针对PPC架构的有ppcboot等4、可以支持多种架构的u-boot等针对不同操作系统1、专门用来启动Linux系统的vivi2、专门用来启动WinCE系统的eboot3、基于eCos系统的引导程序redboot4、可以启动多种操作系统的u-boot等正大气象厚德载物MinnanUniversityofScienceandTechnology一、BootLoader介绍BootLoader简单对比BooloaderMonitor描述X86ARMLILO否Linux磁盘引导程序是否GRUB否GNU的LILO替代程序是否ntldr否x86上引导windowsNT系列是否armboot是专门为arm架构设计的boot否是ppcboot是引导ppc架构操作系统否是vivi是韩国Mizi公司针对三星ARM架构CPU设计引导程序否是redboot是基于eCos的引导程序是是u-boot是通用引导程序,支持多种CPU架构、多种操作系统是是正大气象厚德载物MinnanUniversityofScienceandTechnologyS5P6818systemboot的两种方式(芯片手册第3章systemBootP93):1、外部静态内存启动:2、内部ROM启动:NANDbootSD/MMC/SDFSbootSPISerialEEPROMbootUARTbootUSBboot二、S5p6818启动方式二、S5p6818启动方式--- 确定启动方式为:SDHC启动BootMCU_SD0:1MCU_SD1:0MCU_SD2:1采用的是SD/MMC启动方式SD/MMC接口有3个通道,SD0卡槽、SD1卡槽和EMMC。默认是从SD0卡槽的中SD卡启动,如果SD0卡槽没有SD卡,是从EMMC启动。MCU_SD3:0,选用的是CH1二、S5p6818启动方式--- SDHC启动方式介绍iROM(0x34000000)20KBiRAM(0xffff0000)64KB1、上电执行固化在iROM中的指令,此代码出厂就有,主要功能初始化SD,识别SD接口等;2、从SD/MMC/eMMC拷贝用户的启动代码(约56KB)到iRAM;3、跳转到iRAM地址中,执行用户的启动代码;注:用户启动代码约等于56Kb。二、S5p6818启动过程S5P6818启动过程BL0阶段:芯片选择启动iROM、iROM选择启动下一阶段引导程序所在设备(P95图iROM启动Uboot第一阶段BL1Uboot第一阶段启动Uboot第二阶段BL2Uboot第二阶段启动内核综上所述,我们的userbootcode是从SD卡等外部设备上加载的,这样iROM就会先找到能够启动的外部设备SD卡,并从核心板上的EMMC上搬运userbootcode,而搬运的这段代码就是我们常说的Bootloader。ubootpak.bin主要就是一个包含了2ndboot和uboot.bin的完整Bootloader。二、S5p6818启动过程二、S5p6818启动过程二、S5p6818启动过程二、S5p6818启动过程三、Uboot移植---简介1、简介:Uboot最初是由PPCBoot发展而来,目前已成为Armboot和PPCboot的替代品2、特点:

支持操作系统有Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等。

支持的处理器架构有PowerPC、MIPS、X86、ARM、NIOS、Xscale3、Uboot最新版本:http://git.denx.de/?p=u-boot.git;a=summary三、Uboot移植---源码目录三、Uboot移植---源码目录三、Uboot移植---源码目录三、Uboot移植---编译配置u-boot的配置编译需要经过以下步骤:①在u-boot的根目录下执行:#makeGEC6818_config//对应开发板配置Makefile会构建编译结构,如:架构、cpu、开发板、厂商、芯片、目录等,为下一步真正编译链接做准备。②修改include/configs/x6818.h配置文件③在u-boot根目录下执行:makeARM=ARCHCROSS_COMPILE=../prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-其中ARM=ARCHCROSS_COMPILE=../prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-,可以根据实际情况指定编译器路径,或可将本部分添加到顶层Makefile文件中,则输入编译命令可只输入:make。(注:选择的编译器需支持编译U-boot)三、Uboot移植---编译结果如下:GECuboot.bin三、Uboot移植---编译配置连接文件u-boot.ldsmake命令执行的是Makefile文件的第一个目标即->

->

->

->

->三、Uboot移植---编译配置连接文件u-boot.ldsnsih.txt和2ndboot是厂商提供的,二进制文件。将u-boot.bin、nsih.txt和2ndboot使用tools/mk6818工具生成ubootpak.bin根据以上步骤产生编译和链接所需文件的信息,最终make完成,在根目录下将生成:ubootpak.binu-boot.binu-boot.map三个文件。三、Uboot移植---编译配置1、Uboot源码中README:2、确定配置方法为:makeGEC6818_config3、在终端输入:makehelp4、打开Makefile文件,查找_config5、打开Uboot根目录中的mkconfig,

是一个shell脚本进行配置。三、Uboot移植---编译过程1、打开mkconfigUboot源码提供了配置脚本,完成CPU架构和平台信息选择配置:从boards.cfg文件中匹配到当前平台信息,将该信息重定向到/include/config.h中。信息如下:四、Uboot命令常用命令1、print得到所有命令列表2、help:helptest,列出test功能的使用说明3、ping:测试与其他设备网络是否连通4、setenv:设置环境变量,例:setenvserverip5、saveenv:设置好环境变量以后,保存变量值6、tftp:tftp32000000vmlinux,把server(IP=环境变量中设置的serverip)中/tftpdroot/下的vmlinux通过TFTP读入到物理内存32000000处。7、bootm:起动UBOOTTOOLS制作的压缩LINUX内核,bootm32000008、md:修改RAM中的内容,md32000000(内存的起始地址)四、Uboot命令---U-Boot命令制作内核的启动,通过U-Boot命令来实现的。U-Boot中每个命令都通过U_BOOT_CMD宏来定义,格式如下:U_BOOT_CMD(_name,_maxargs,_rep,_cmd,_usage,_help)各项参数的意义如下:

_name:命令的名字,它不是一个字符串。

_maxargs:最大的参数。

_rep:命令是否可重复,可重复是指运行一个命令后,下次敲回即可再次运行。

_cmd:对应的函数指针,类型为(*cmd)(structcmd_tbl_s*,int,int,char*[])。

_usage:简单的使用说明,这是个字符串。

_help:较详细的使用说明,这是个字符串。四、Uboot命令---U-Boot命令制作例:在U-boot中增加一条test命令,命令至少支持接收3个参数。并且根据输入参数做求和,打印求和的值。1)进入common目录下新增一个cmd_test.c文件,并且复制一份模板。2)打开cmd_test.c按要求修改。制作命令代码框架如下:#include<common.h>#include<command.h>

staticintdo_help(cmd_tbl_t*cmdtp,intflag,intargc,char*constargv[]){……}

U_BOOT_CMD(……);四、Uboot命令---U-Boot命令制作例:在U-boot中增加一条test命令,命令至少支持接收3个参数。并且根据输入参数做求和,打印求和的值。3)修改后如下:4)保存,并修改本级Makefile文件,添加编译语句。ifndefCONFIG_SPL_BUILDobj-y+=main.oobj-y+=command.oobj-y+=exports.oobj-y+=hash.oobj-y+=cmd_test.o5)编译与下载了解awk工具02PARTTWOLinux内核编译与移植正大气象厚德载物MinnanUniversityofScienceandTechnology一、Linux内核版本及获得二、Linux内核结构三、Linux内核启动引导过程四、Linux内核的配置和编译五、Linux3.4.39内核移植Linux内核编译与移植-S5P6818一、Linux内核版本变迁及获得BootLoader系统启动引导程序,主要作用:搬移内核(系统)到内存中执行。一、Linux内核版本变迁及其获得登录Linux内核的官方网站/,可以看到如图Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如下面几行它们构成了Linux的版本号:3.4.39。VERSION=3PATCHLEVEL=6SUBLEVEL=39二、Linux内核结构内核源码结构下载源码后解压进入源码顶层目录如下图,其中首先要分析的三个重要文件为:Makefile、Kconfig、.config。.config为隐藏文件需输入ls-a可查看,是编译后自动生成文件保存相关配置项,Kconfig是生成配置菜单的重要文件。1、Makefile1)打开顶层Makefile:init-y、drivers-y、net-y、libs-y和core-y。2)arch/$(ARCH)/Makefile,以ARM体系为例,在arch/arm/Makefile中出现了另一类:head-y对于没有MMU的处理器,MMUEXT的值位-nommu,使用文件head-nommu.S;对于有MMU的处理器,MMUEXT的值为空,使用文案head.S。3)在配置内核时生成配置文件.config三、Linux内核启动引导过程1、Makefile3)在配置内核时生成配置文件.config顶层Makefile使用如下语句间接包含.config文件,以后就根据.config中定义的各个选项决定编译那些文件。三、Linux内核启动引导过程vmlinux-all表示所有构成内核映像文件vmlinux的文件。从vmlinux-init开始可知这些目标文件的顺序为:head-y、init-y、core-y、libs-y、drivers-y、net-y,即arch/arm/head.o(假设没有MMU,否则为head-nommu.o)、arch/arm/kernel/init_task.o、init/built-in.o、usr/built-in.o等。1、Makefile3)在配置内核时生成配置文件.config其中vmlinux-lds表示连接脚本为arch/$(SRCARCH)/kernel/vmlinux.lds。对于ARM体系,连接脚本就是arch/arm/kernel/vmlinux.lds,它由arch/arm/kernel/vmlinux.lds.S文件生成,规则在scripts/Makefile.build中三、Linux内核启动引导过程生成的arch/arm/kernel/vmlinux.lds顶层Makefile和arch/$(ARCH)/Makefile决定根目录下哪些子目录、arch/$(ARCH)/目录下那些文件和目录被编进内核。各级子目录下的Makefile决定所在目录下哪些文件被编进内核,哪些文件被编成模块(即驱动程序)等。最后顶层Makefile按照一定的顺序组织文件,根据连接脚本arch/$(ARCH)/kernel/vmlinux.lds生成内核映像文件vmlinux。2Kconfig分析内核目录下执行“makemenuconfig”三、Linux内核启动引导过程生成的arch/arm/kernel/vmlinux.lds内核源码的每个子目录中,都有一个Kconfig文件。Kconfig用于配置内核,是各种配置界面的源文件。1内核编译(1)修改顶层Makefie。CROSS_COMPILE变量赋值的路径为编译内核编译器所在路径。请区分编译内核与编译应用程序所使用的编译器不是同一个编译器。(2)查看与修改平台的支持文件。根据自己设备体系结构选择相应的选项。粤嵌GEC6818实验平台选择信息为:makemenuconfig--->SystemType--->ARMsystemtype(SLsiAPS5P6818)--->(X)SLsiAPS5P6818,四、Linux内核的配置和编译1内核编译(2)查看与修改平台的支持文件。根据自己设备体系结构选择相应的选项。粤嵌GEC6818实验平台选择信息为:makemenuconfig--->SystemType--->ARMsystemtype(SLsiAPS5P6818)--->(X)SLsiAPS5P6818,四、Linux内核的配置和编译1内核编译(3)输入命令make编译,再输入命令:makeuImage生成U-boot引导启动的uImage文件。四、Linux内核的配置和编译说明:输入makeuImage

如果报错,请检查mkimage文件是否放到/bin下。如没有请进入前期章节编译过的bootloader源码目录的tools中mkimage复制到/bin。命令为:sudocp../GEC6818uboot/tools/mkimage/bin1内核编译vmlinux:Linux内核编译出来的原始的内核文件,elf格式,未做压缩处理。该映像可用于定位内核问题,但不能直接引导Linux系统启动。Image:Linux内核编译时,使用objcopy处理vmlinux后生成的二进制内核映像。该映像未压缩,可直接引导Linux系统启动。

zImage:使用gzip压缩Image后,使用objcopy命令生成的Linux内核映像。该映像一般作为uboot的引导映像文件。

uImage:在zImage前面增加一个64字节的头,描述映像文件类型,加载位置,大小等信息。该映像是老版本uboot专用的引导映像。四、Linux内核的配置和编译03PARTTHERELinux文件系统制作正大气象厚德载物MinnanUniversityofScienceandTechnology一、Linux文件系统概念二、Linux制作根文件系统根文件系统制作-S5P6818一、Linux文件系统概念Linux支持多种文件系统,包括ext3、ext4、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(VirtualFileSystem),为各类文件系统提供一个统一的操作界面和应用编程接口。Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。二、制作根文件系统系统启动时基本功能。1、init进程的应用程序挂在根文件系统上。2、根文件系统提供了根目录/。3、内核启动后的应用层配置(etc目录)在根文件系统上。(可以认为,发行版=内核+rootfs)。4、Shell命令程序在根文件系统上(ls、cd等)。最小根文件系统一般至少包含:bin、sbin、dev、lib、etc、mnt等目录及其中的关键文件。二、制作根文件系统busybox是一个集成了一百多个最常用linux命令和工具的软件,是一个开源项目,遵循GPLv2协议。Busybox将众多的UNIX命令集合进一个很小的可执行程序中,可以用来替代GNUfileutils、shellutils等工具集。Busybox中各种命令与相应的GNU工具相比,所能提供的选项比较少,但是功能基本足够,俗称嵌入式系统中的“瑞士军刀”。二、制作根文件系统1文件系统配置(1)获取busybox工具:/downloads/,本章以busybox-1.26.2为例进行配置。新建一个文件夹,复制busybox压缩包到改文件夹下,并解压busybox-1.26.2.tar.bz2,进入解压缩后的目录,并清除预配置。二、制作根文件系统1文件系统配置(2)输入makemenuconfig进入busybox配置界面如图7.23所示,菜单各项表示编译后所能支持的工具或命令。例如“Editors--->”菜单进入后可以见“[*]vi(NEW)”表示busybox编译后支持vi编辑器。其他选项请根据实际情况或者兴趣自行了解,本节案例全部选择默认配置。二、制作根文件系统1文件系统配置编译后,文件保存位置在(./_install)BusyBoxinstallationprefix,如图7.25所示,此处可以默认,配置完成,退出时保存。二、制作根文件系统1文件系统配置(3)编译。打开顶层Makefile,修改编译器变量值。编译器路径请根据自己系统实际情况指定:ARCH?=arm,CROSS_COMPILE?=/usr/local/arm/5.4.0/usr/bin/arm-linux-。然后输入make将编译好的文件全部复制到指定目录(此处为默认目录),输入makeinstall,复制成功结果。makeinstall后查看对应目录,了解目录结构,例如_install、_install/bin、linuxrc。linuxrc文件是链接脚本bin/busybox文件。二、制作根文件系统1文件系统配置查看busybox最终得到的文件,顶层目录下的_install,进入该目录,可见已生成bin、sbin、linuxrc并且其中已存在相关内容,至此最小根文件系统bin、sbin已制作完成,后续将在_install目录下完最小系统所需的其他目录与内容。cw@dell:~/rootfs/busybox-1.26.2$ls_install/cw@dell:~/rootfs/busybox-1.26.2$ls_install/bin/cw@dell:~/rootfs/busybox-1.26.2$cd_install/cw@dell:~/rootfs/busybox-1.26.2/_install$lslinuxrc-lcw@dell:~/rootfs/busybox-1.26.2/_install$filebin/busybox二、制作根文件系统1文件系统配置(4)复制lib内容。在_install目新建lib,找到交叉编译器所在路径下的lib目录,按依赖关系复制其中所有文件到新建的lib中。(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论