
嵌入式系统的建立和Linux系统的移植19嵌入式Linux系统开发环境的建立嵌入式Linux系统的开发通常可以分为以下三个步骤. 首先,在主机上建立一个交叉编译环境,然后在主机上进行编译,Bootloader然后通过JTAG烧毁单个板,最后构建一个嵌入式Linux系统并将其移植到开发板上. 构建嵌入式Linux系统主要包括根据目标板的硬件特性修改内核源文件,然后自定义和编译内核以最终构建Linux的根文件系统. 在为PC开发软件时,可以直接在PC上编辑,编译和调试软件,直到最终软件在PC上发布为止. 对于嵌入式软件的开发,由于嵌入式系统的资源有限,不能直接在其上开发软件,因此有必要通过主机为它构建一个跨开发环境,即编辑和编译嵌入式系统. 主机上的程序,最后将其下载到目标板上进行操作验证. 主机是指PC,目标板是指嵌入式设备. 在本主题中,目标板是S3C2440开发板. 以下分别与硬件环境和软件环境进行介绍. 1跨开发硬件环境主机使用USB到COMS,网络电缆和目标板mini2440嵌入式开发板的串行端口. JTAG端口在这里没有用,因为我们已经在开发板上的Nor Flash中对uboot进行了编程. 通过uboot,我们可以选择通过串行端口或网络电缆将程序直接下载到目标板上,并且网络端口如图3所示连接1 EternetUsb与UART主机DM9000UART目标机交叉开发硬件连接图交叉操作硬件链接图2首先构建交叉编译环境计算机是装有Windows XP系统的主机. 在xp系统上安装虚拟虚拟江苏科技大学硕论文. 20机器软件vmware在vmware中安装我们需要的系统. 选择Fedora9 0作为我们的Linux系统交叉编译器. 选择arm linux gcc 3从网站上下载它. 以下详细介绍了构建交叉编译环境的步骤. 首先将下载的交叉编译器linux gcc tgz复制到主目录,然后打开该目录以进行解压缩. 具体步骤如下. 将arm linux gcc tgz解压缩到cd主页tar zxvf任何目录中的arm linux gcc执行以上命令,将arm linux gcc安装到usr本地arm将交叉编译器的路径添加到系统环境变量中. 实现方法如下. 打开根文件,然后将交叉编译器添加到bashrc文件中. 添加路径的特定代码如下: export PATH PATH opt FriendlyARM toolschain通过执行命令源root bashrc来检查交叉编译链的路径配置是否正确,从而执行新的交叉编译环境. 在命令行上输入arm linux gcc,将显示以下信息. 这显示了交叉编译环境. 成功安装的显示信息如图3 2所示. 交叉编译环境现已完成.
将来使用此工具链时,无需指定绝对路径. 系统将自动找到它. 嵌入式系统的构建和Linux系统的移植21 BootLoader移植启动代码的引导模式通常在嵌入式系统上电后从地址0开始. 系统使用从NANDFlash启动的功能,因此当系统启动时,芯片中的主控件StepStone将自动将NANDFlash中的第一个4K程序复制到内存中,以执行并完成代码处理. 开发中最常用的是串行端口. 我们经常使用它来连接PC和开发板. 在串行端口上输入各种命令来操作BootLoader,您可以通过串行端口界面观察运行结果,也可以通过串行端口控件通过USB将程序下载到开发板上. . 当然,这仅对开发人员有意义,因为最终产品的用户应用程序不需要知道或使用它来进行操作. 因此,BootLoader具有以下两种操作模式: 分别对应于用户和开发人员模式的引导加载模式和下载模式39就像功能强大的UBoot支持这两种工作模式一样,用户和开发人员都可以在这两种模式开关上工作. 在许多BootLoader中进行引导移植. 引导更为通用,源代码是开源的. 编译方法类似于Linux内核. 大多数嵌入式平台都支持它,并且可以并且可以很好地支持Linux系统.

在此系统中使用了U Boot. 通过以上描述,每个人都应该了解U Boot的一般情况. 现在开始移植工作. 我们要做的工作是移植嵌入式系统的构建,即根据不同的地方进行更改. U引导程序从未支持S3C2440. 在这里,我们将S3C2410用作修改和移植的蓝图. S3C2440和S3C2410的区别在于前者的频率较高,并且添加了和音频接口. 对于寄存器,除了新添加的模块的寄存器以外,NANDFlASH的控制有很大的变化. 时钟控制寄存器中也有某些变化. 其他基本兼容性. 以下是迁移过程的简要介绍. 40建立开发板文件测试和编译环境. 首先修改顶部的Makefile,以添加交叉编译工具链和开发板配置选项. 在开发板目录中为开发板mini2440创建目录. 将sbc2410用作蓝图可以加快迁移过程,因此将sbc2410文件复制到此目录中. 将2440的定义添加到mini2440目录中的Makefile中. 至此,我们已经完成了uboot移植的第一步. 添加目标板以支持S3C2440和S3C2410基本相似. 区别在于PLL的初始化参数不同,即系统时钟的设置,NANDFlash控制器的操作. 可以通过uboot中的相关文件在数据表中找到这些文件. 可以修改该文件.
在文件cpu ann920 start中,添加S3C2440A时钟相关寄存器的定义并进行设置. 将主频率FCLK设置为405MHz. 江苏科技大学硕论文22,增加了NandFlash的复位程序,实现了从uboot拷贝NandFlash到SDRAM的从机启动. 将NandFlash读取功能文件nand read添加到板卡mini2440中以进行启动调用,以将uboot从NandFlash复制到SDRAM. 为了匹配mini2440的内存配置,需要修改板卡mini2440的低级初始化文件. 这已连接到NorFlash和SDRAM. 我们可以在其中添加S3C2440存储器控制寄存器的定义. S3C2410的Nand Flash控制器仅支持512B 16B Nand Flash,S3C2440还支持2KB 64B大容量Nand Flash. 因此,Nand Flash控制器上的寄存器和控制流之间的区别是显而易见的. 底层驱动程序代码的修改也是必要的. 将Nand Flash芯片型号信息添加到包含linux mtd nand ids h的文件中,即,将本系统使用的K9F1G08的配置信息添加到结构nand flash id中. 在include configs mini2440 h头文件中定义Nand使用的宏和寄存器. 在板卡mini2440目录中创建一个新的nand read文件,以实现要在上述程序集中调用的nand read ll函数.
Linux内核移植Linux内核结构在开始Linux内核移植之前,我们必须首先了解Linux内核源代码41的目录结构. 表3 3显示了嵌入式系统的构建和Linux系统的移植. 23 Linux内核子目录结构表linuxkernel内容目录名称描述了与Arch体系结构相关的代码. 对于每种体系结构,CPU arch目录下都有一个对应的子目录. arch arm,arch i386块设备通用功能crypto常用的加密和哈希算法以及一些压缩和CRC检查算法驱动程序,每个子目录中的所有设备驱动程序都对应一种驱动程序,例如块设备驱动程序的驱动程序块. 一个字符设备驱动程序,驱动程序mtd是用于NOR Flash,NAND Flash等存储设备的驱动程序. fs Linux支持的文件系统代码每个子目录对应于一个文件系统,例如fs jffs2,fs ext2,fs ext3包含内核头文件文件在include linux目录中存储有基本的头文件,各种与驱动程序相关或与功能组件相关的头文件,例如include media,include mtd,include net,以及各种与系统相关的头文件,例如include asm arm和include asm i386.
配置内核后,include asm是include asm xxx. 例如,包括asm arm的链接init. 内核的初始化代码不是系统的引导代码. 主c文件中的start kernel函数是内核引导后的第一次运行. 功能ipc进程间通信代码由内核管理的内核核心代码和与处理器相关的代码位于arch内核目录中. lib内核使用的某些库函数代码(例如crc32 c,字符串和与处理器相关的库函数代码)位于archlib目录中. mm内存管理代码与处理器有关的内存管理代码位于arch mm目录下. 网络支持代码. 每个子目录对应于网络的一个方面. 安全性,与密钥相关的代码声音. 音频设备的驱动程序usr用于进行压缩. cpio存档文件initrd的图像. 它可以用作内核启动后挂载的第一个文件系统. 文档内核文档脚本用于配置和编译内核的脚本文件有17个子目录. 每个目录功能都是独立的. 最后两个目录不包含内核代码. . Linux内核移植嵌入式Linux操作系统具有良好的灵活性. 用户可以根据硬件配置来配置内核,并进行一些必要的修改. 这样可以精简系统,使其适合嵌入式系统的特性,从而节省存储空间.

对于Samsung 2440,我们可以在arch目录的arm体系结构文件目录下找到相关代码,因此,在基于该体系结构移植系统时,我们首先从主目录的24目录中的文件开始江苏科技大学学位论文开始修改. 迁移过程如下. 将内核源代码解压缩到相应的文件夹. 在这里,我们把它放在家里. 首先创建文件夹. 具体实现如下. mkdir home shengke tar –jxvf linux tarbz2 homeshengke返回内核根目录. 修改主Makefile文件. 指定平台和交叉编译器ARCH臂CROSS COMPILE臂linux修改系统输入时钟频率以打开mach smdk2440 c文件. 在开发板上,我们使用的晶体振荡器为12MHz. 我们可以将其修改为s3c24xx初始时钟12000000. 这样就完成了系统输入时钟频率的更改. 独立添加开发平台名称. 在文件mach s3c2440 mach smdk2440 c中找到MACHINE START函数. 将其修改为MACHINE START S3C2440“ mine S3C2440”. 因此,我们添加了自己的平台名称.
修改Nandflash分区信息. 首先,在以下结构中添加特定的修改,如下所示: 静态结构mtd分区smdk默认nand部件名称bootloader偏移量0x00000000大小0x00030000 namekernel偏移量0x00050000大小0x00200000 nameroot偏移量0x00250000大小0x03dac000嵌入式系统Linux系统的构建和移植25第二个添加平台信息s3c2410平台nand smdk nand info smdk nand info twrph030 twrph1机器号的修改由于在启动代码阶段传递给系统内核的机器代码是782,因此在启动内核时,请确保内核机器号与通过的参数值一致. Bootloader,在文件弓臂工具的数学类型中专门对其进行了修改. 将s3c2440 ARCH S3C2440 S3C2440 362中的最后一个362更改为782. 编译内核有两种方法可以编译Linux内核. 一个是压缩内核,另一个是非压缩内核.

由于内核可以两种不同的格式存在,因此相对内核启动也有两种类型. zImage是压缩的图像. 压缩的图像文件比图像源文件小得多. 与未压缩的图像文件相比,压缩的图像必须在系统启动时开始时添加解压缩代码. 必须先完成解压缩工作才能继续执行嵌入式系统的构建,因此执行速度比未压缩的文件要慢. 嵌入式系统中一般的存储空容量相对较小,因此在这里我们使用zImage图像压缩文件来提高存储空间的利用率,因此此方法通常在嵌入式系统中使用. 编译完成后,生成的zImage内核映像文件将通过USB下载电缆下载到开发板上以运行. 根文件系统简介Windows操作系统可以将硬盘分为CD和其他磁盘,以分别访问Linux. MTD设备分为几个分区. 不同类型的文件存储在不同的分区42中. Linux启动分区的文件结构如下图所示. 江苏科技大学硕论文26嵌入式Linux系统中的典型分区典型分区结构Embeddedlinux系统启动linux时使用的第一个文件系统是根文件系统. 如果系统连接失败或参数配置错误,Linux内核将无法正常启动. 根据FHS标准,根文件系统通常在顶层具有以下目录. 根文件系统目录如下表所示. 表root系统的内容目录名称说明procusretcdevsbinbinmnthomebootlibvartmproot存储用于启动系统,修复系统,存储变量数据和存储临时文件的基本系统命令. root用户的主目录用于临时挂载文件系统. 挂载点通常是一个空目录. 用户目录是可选的. 它包括用于服务帐户锁定的主目录,例如FTP引导加载程序用于存储共享库的静态文件,而加载模块共享库用于启动系统以在根文件系统中运行可执行目录. 空目录通常用作proc文件系统的挂载点,以存储共享的只读程序和数据. 系统配置文件包括用于存储设备文件和其他特殊文件的启动文件. 所有用户都可以使用的基本命令根文件系统创建工具Busybox简介. Busybox支持uclibc库和glibc库官方网站进行www busybox网络下载.
下载并解压缩后,您将找到以下配置选项,如图3所示嵌入式系统构建和Linux系统迁移27配置选项图图Configurationdiagram输入图3所示的第一个目录First目录Fig first directory第一项It是一些常见的设置. 第二项是链接模式编译选项,然后是调试选项,依此类推. 主目录中的归档实用程序各种压缩和压缩工具Coreutils诸如ls cp和其他控制台实用程序debian命令之类的Core命令编辑器通常选择编辑命令vi查找实用程序查找命令Init实用程序init程序配置选项network实用程序网络命令可以选择一些命令可以方便地调试,例如telnetd ping tftp,修改根目录中的makefile,指定交叉编译工具,然后进行make. 使用Busybox,您可以为根文件系统自动生成bin,sbin,usr目录和linuxrc文件. 最后,将编译后的busybox安装到指定目录. 江苏科技大学硕论文28文件系统分类Linux文件系统结构如下图,下面的两个图相互弥补,如图3所示. 目录树虚拟文件系统vfs JFFS2YAFFSRamfsMTD字符设备MTD块设备MTD设备驱动程序RAMNor FlashNAND Flash用户层内核底层驱动硬件层文件系统分类图文件系统分类图Jffs2主要用于基于Norflash的MTD驱动程序层,可以读写支持数据压缩的日志文件系统. Yaffs特别为nandflash设计了一个不支持数据压缩的文件系统. 更快的安装时间更短.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-259169-1.html
做过调查吗
在忙吗