AM335x的linux内核移植.docx_第1页
AM335x的linux内核移植.docx_第2页
AM335x的linux内核移植.docx_第3页
AM335x的linux内核移植.docx_第4页
AM335x的linux内核移植.docx_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

摘 要 随着时代的发展,人们的生活越来越离不开电子产品,特别是嵌入式电子产品。嵌入式的发展越来越好,得益于硬件的发展和各类嵌入式系统的进步。在众多的嵌入式系统中,最为让人熟悉的就是linux了。所以,这次的课题就以linux内核为主题,使用的开发板是TI的beaglebone white。关键词:Linux移植,嵌入式,arm目录1.嵌入式系统的概念4 1.1 嵌入式系统定义 4 1.2 ATMEL9200开发平台. 42. BootLoader简介.4 2.1 Boot Loader概念. 4 2.2 Boot Loader启动过程. 5 2.3 常用的Bootloader .5 2.4 u-boot移植 .53. 嵌入式linux操作系统.7 3.1 嵌入式Linux.7 3.2 嵌入式Linux的特点.7 3.3 从Linux到嵌入式Linux.84. 基于BeagleBone的嵌入式linux系统移植9 4.1 移植概念. 9 4.2 Linux与移植相关内核结构. 94.3 嵌入式Linux 操作系统移植95 文件系统构建96 把u-boot、linux内核、文件系统下载到SD卡中117启动开发板,链接pc,查看效果.118 参考文献.131.嵌入式系统的概念1.1嵌入式系统定义在信息科学技术爆炸式增长的今天,嵌入式系统早已经融入了我们生活的方方面面。美国汽车大王福特公司的高级经理曾宣称,“福特出售的计算能力已超过了IBM”。这并不是一个哗众取宠或者夸张的说法,在真正感受这句话的震撼力之前,让我们先了解一下嵌入式系统(Embedded Systems)的定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。举例来说,大到油田的集散控制系统和工厂流水线,小到家用VCD机或手机,甚至组成普通PC终端设备的键盘、鼠标、软驱、硬盘、显示卡、显示器、Modem、网卡、声卡等均是由嵌入式处理器控制的,嵌入式系统市场的深度和广度,由此可见一斑,尽管如此,它的市场价值也许仍然超过了您的想象:今天,嵌入式系统带来的工业年产值已超过了1万亿美元。1.2BeagleBone开发平台 BeagleBone 是仅有信用卡大小的低成本 Linux 计算机,它与 Internet 相连并运行高级操作系统,例如 Android 4.0 和 Ubuntu Linux。BeagleBone 包含大量 I/O 并使用TI Sitara AM335x ARM Cortex-A8 处理器为实时分析提供处理能力。要进一步进行定制和扩展,可以使用Cape 插件板以轻松扩展 BeagleBone 的功能。BeagleBone 具有广泛的开源软件支持选项,包括社区支持的ngstrm Linux 发行版、Ubuntu或多个其他Linux 发行版。它还支持TI Android DevKit和TI Sitara Linux EZ SDK。TI 支持的两个操作系统使您可以快速入门并操作,只需进行简单的设置即可获得开箱即用体验。它们包括用于启动演示、基准和应用的 GUI。此外,您可以快速开始开发您自己的应用。还通过嵌入的 Adeneo 支持Windows Embedded Compact 7。BeagleBone 是一个由社区支持的平台,可用作构建更完整系统的基础和社区软件基线的目标。作为一种替代方案,德州仪器 (TI) 直接支持AM335x 入门套件或AM335x 评估模块。2. BootLoader简介2.1 Boot Loader概念简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对 Boot Loader 归纳出一些通用的概念来,以指导用户特定的 Boot Loader 设计与实现。2.2 Boot Loader启动过程系统上电后,先执行第一阶段代码,进行相应的初始化后,将 Blob 第二阶段代码复制到 RAM 地址 bloc_abs_base,然后跳转到第二阶段开始执行。在第二阶段中,从汇编跳转到 C 的 Main() 函数,继续进行如下工作:外围的硬件初始化(串口,USB 等);将 Flash 中的 kernel 加载到 DRAM 的 kernel 区域;将 Flash 中的 ramdisk 加载到 DRAM 的 ramdisk 区域;根据用户选择,进入命令行模块或启动 kernel。2.3 常用的Bootloader(1)BlobBlob是Boot Loader Object的缩写,是一款功能强大的Bootloader。它遵循GPL,源代码完全开放。Blob既可以用来简单的调试,也可以启动Linux kernel。Blob最初是Jan-Derk Bakker和Erik Mouw为一块名为LART(Linux Advanced Radio Terminal)的板子写的,该板使用的处理器是StrongARM SA-1100。现在Blob已经被移植到了很多CPU上,包括S3C44B0。(2)ArmbootArmboot是一个bootloader,是为基于ARM或者StrongARM CPU的嵌入式系统所设计的.它支持多种类型的Flash;允许映像文件经由bootp . dhcp . tftp从网络传输;支持从串口线下载S-record或者binary文件;允许内存的显示及修改;支持jffs2文件系统等。 (3)u-bootU-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。但是U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。2.4 u-boot移植因为TI是一家非常负责的公司,所以它的官网上有非常详细的移植方法文档和工具,这给我们开发人员带来了极大的便利。以下的移植都是参考Ti提供的技术文档的。我们现在Ti的官网查找对应的资料。全英文的,看得有点吃力。下载Ti提供的在linux地下进行开发的工具ti-sdk-am335x-evm-07.00.00.00,然后安装即可得到。我们到目录:/ti-sdk-am335x-evm-07.00.00.00/board-support/u-boot-2013.10-ti2013.12.01/下进行如下米命令进行默认的配置编译:make O=am335x CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm am335x_evm经过编译完成后,在当前目录下回有一个am335x目录生成,里面包含了u-boot启动映像u-boot.img文件和MLO文件。以下是am335x的config.h的部分代码:#ifndef _CONFIG_AM335X_EVM_H#define _CONFIG_AM335X_EVM_H#include #define MACH_TYPE_TIAM335EVM3589/* Until the next sync */#define CONFIG_MACH_TYPEMACH_TYPE_TIAM335EVM/* Clock Defines */#define V_OSCK24000000 /* Clock output from T2 */#define V_SCLK(V_OSCK)/* Custom script for NOR */#define CONFIG_SYS_LDSCRIPTboard/ti/am335x/u-boot.lds/* Always 128 KiB env size */#define CONFIG_ENV_SIZE(128 10)#define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG#ifndef CONFIG_SPL_BUILD#define CONFIG_EXTRA_ENV_SETTINGS loadaddr=0x802000000 fdtaddr=0x80F800000 fdt_high=0xa00000000 boot_fdt=try0 rdaddr=0x810000000 bootpart=0:20 bootdir=/boot0 bootfile=zImage0 fdtfile=undefined0 console=ttyO0,115200n80 partitions= uuid_disk=$uuid_gpt_disk; name=rootfs,start=2MiB,size=-,uuid=$uuid_gpt_rootfs0 optargs=0 dfu_alt_info_mmc= DFU_ALT_INFO_MMC 0 dfu_alt_info_emmc=rawemmc mmc 0 37519360 mmcdev=00 mmcroot=/dev/mmcblk0p2 ro0 mmcrootfstype=ext4 rootwait0 usbroot=/dev/sda2 rw0 usbrootfstype=ext4 rootwait0 rootpath=/export/rootfs0 nfsopts=nolock0 static_ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname :off0 ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=$rdaddr,64M0 ramrootfstype=ext20 mmcargs=setenv bootargs console=$console $optargs root=$mmcroot rootfstype=$mmcrootfstype0 usbargs=setenv bootargs console=$console $optargs root=$usbroot rootfstype=$usbrootfstype0 spiroot=/dev/mtdblock4 rw0 spirootfstype=jffs20 spisrcaddr=0xe00000 spiimgsize=0x3620000 spibusno=00 spiargs=setenv bootargs console=$console $optargs root=$spiroot 3. 嵌入式linux操作系统3.1 嵌入式Linux 嵌入式Linux(Embedded Linux)是指对Linux经过小型化裁剪后,能够固化在容量只有几十万字节或几十亿字节的存储器芯片或单片机中,应用于特定嵌入式场合的专用Linux操作系统。3.2 嵌入式Linux的特点1)性能稳定,功能强大,占用资源较少。Linux是按照POSIX标准编写的,许多源代码借鉴了UNIX。2)模块的动态加载,独特的内核结构和工作方式使Linux非常适合于工作在嵌入式系统中。3)良好的平台可移植性,Linux已经支持除i386、i586、i686和arm之外的alpha、m68k、mips、mips64、ppc、sparc、sparc64、ia64的十多种体系结构。4)系统可剪裁性,可以灵活的添加和删减各种驱动程序,具体的PDE(Portable Digital Equippment)跟实际应用联系十分密切,采用的器件多种多样,良好的平台可移植性和系统可剪裁性对灵活的系统设计有着极其重要的意义,也为开发调试提供了方便。5)整个系统是免费的,只要遵守GPL规则,任何人都可以使用、修改甚至销售Linux,全世界有无数个人和组织在不断的完善Linux,有众多的计算机厂商提供Linux相关的产品和服务。开放源代码意味着对新设计、制造的硬件产品的快速支持。嵌入式系统的应用领域通常要求系统高度个性化、高度细分。因此,对新产品的快速支持是一个适合推广的嵌入式操作系统必须具备的能力。6)对多种网络协议的完美支持。在即将到来的后PC时代,联网将成为数字产品必备的能力,没有联网能力的设备,在信息化时代会显得毫无意义。而Linux天生具备优良的网络连接能力,支持当前所有的网络协议。3.3 从Linux到嵌入式Linux 由于Linux开始是为台式机开发的,与台式机相比,嵌入式系统有自己的一些特点,如内存容量有限等,所以把Linux应用于嵌入式系统,还需要做大量的工作。这些工作包括:1)嵌入式系统中的挥发性/非挥发性存储器容量受到严格的限制,为适应系统对尺寸的要求,需要剪裁嵌入式Linux的内核。2)嵌入式系统的主频和总线带宽也经常由于成本或应用的原因,不能或不必提供更高的性能,作为操作系统,嵌入式Linux也需要做出相应的改变,改写某些核心模块和驱动程序。3)嵌入式Linux直接面向特定的应用,为了适应一些特殊的应用需求,有时必须改变嵌入式Linux的工作方式。例如Linux是一个多线程、多任务的操作系统,并不适用于某些实时性要求较高的环境中,目前已经出现了经过改造的,专门用于实时环境的嵌入式实时Linux。4)嵌入式Linux的图形环境与桌面系统相比简陋的多,对中文的支持也不够完善,对于某些手持数字设备,这方面还有许多工作要做。5)在嵌入式系统领域,没有Wintel这样的垄断组织,相比于桌面系统Linux,嵌入式Linux有更大的发展空间。4. 基于BeagleBone的嵌入式linux系统移植4.1 移植概念 在同一个硬件平台上可以运行不同的操作系统,比如在PC机上可以运行windows、linux。同样把操作系统和硬件相关的部分做相应的修改就可以运行在不同的硬件平台上,这就叫移植,即把运行在一个平台上的软件,经过修改运行在其它平台。Linux 本身是个宏内核,这给移植带来了困难,但由于其有清晰的结构,所以移植也相对容易。Linux和CPU相关的目录是arch/和arch/asm-/目录中,是具体CPU体系的名字如arm。与之相关的结构是arch/arm和arch/asm-arm。嵌入式系统是“硬件可裁剪的”,因此工程师设计的硬件电路有所不同,从而要根据具体的硬件电路进行相应的内核电码移植。4.2 Linux与移植相关内核结构1内存管理:内存管理的代码主要在/mm,但是特定结构的代码在arch/*/mm。缺页中断处理的代码在/mm/memory.c ,而内存映射和页高速缓存器的代码在/mm/filemap.c 。缓冲器高速缓存是在/mm/buffer.c 中实现,而交换高速缓存是在mm/swap_state.c和mm/swapfile.c。2进程间通信:所有的SystemVIPC对象权限都包含在ipc_perm数据结构中,这可以在include/linux/ipc.h中找到。SystemV消息是在ipc/msg.c中实现。共享内存在ipc/shm.c中实现。信号量在ipc/sem.c中,管道在/ipc/pipe.c中实现。4.3 嵌入式Linux 操作系统移植到目录:/ti-sdk-am335x-evm-07.00.00.00/board-support/linux-3.12.10-ti2013.12.01/下使用默认配置编译:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- omap2plus_defconfigmake ARCH=arm CROSS_COMPILE= arm-linux-gnueabihf- zImage编译完成后,会在目录./arch/arm/boot/下生成zImage文件。在arch/arm/boot/dts下有相应的device tree 文件。如果不适用默认提供的filesystem,则需要用到相应开发板的dtb文件。如beaglebone需要am335x-bone.dtb。把内核和对应dtb文件复制到filesystem的/boot目录下。如果自定义配置的话,可以用menuconfig的图形界面进行配置make ARCH=arm CROSS_COMPILE=arm-linux-gunueabihf- menuconfig5 文件系统构建到/ti-sdk-am335x-evm-07.00.00.00/filesystem目录下解压tisdk-rootfs-image-am335x-evm.tar.gz把kernel 和dtb文件复制到解压出来的文件系统目录下的/boot下。然后再把解压出来的全部文件夹打包。(也可以不压缩打包,详细见下文。)如果不打包,可以直接将全部目录复制到已经分区好的SDcard的rootfs分区,效果与使用工具把文件系统压缩包写入分区一样,但可能比较耗时。6 把u-boot、linux内核、文件系统下载到SD卡中到目录:/ti-sdk-am335x-evm-07.00.00.00/bin下,使用工具create-sdcard.sh这个shell脚本可以帮我们对SD卡进行分区,然后帮我们把三个文件都下载到对应的分区里。实际上我们只要用它来分区就可以了,文件可以直接复制到对应分区。7启动开发板,链接pc,查看效果启动开发板。使用如下命令minicom c on D /dev/ttyUSB0即可连接成功。按一下复位键。即可看到开发板上的系统正在启动。输入默认的用户ID:root即可登陆。启动时的代码打印内容如下:U-Boot SPL 2013.10-g78d8ebd (Mar 30 2014 - 20:46:34) No AC power, disabling frequency switch reading args spl: error reading image args, err - -1 reading u-boot.img reading u-boot.img U-Boot 2013.10-00189-g78d8ebd (Dec 23 2014 - 12:26:16) I2C: ready DRAM: 256 MiB NAND: 0 MiB MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1 * Error - No Valid Environment Area found * Warning - bad CRC, using default environment Net: not set. Validating first E-fuse MAC cpsw, usb_ether Hit any key to stop autoboot: 0 mmc0 is current device Scanning mmc 0. 4117600 bytes read in 580 ms (6.8 MiB/s) 33206 bytes read in 59 ms (548.8 KiB/s) mmc0 is current device SD/MMC found on device 0 reading uEnv.txt * Unable to read file uEnv.txt * 4117600 bytes read in 580 ms (6.8 MiB/s) 33206 bytes read in 59 ms (548.8 KiB/s) Kernel image 0x80200000 0x000000 - 0x3ed460 # Flattened Device Tree blob at 80f80000 Booting using the fdt blob at 0x80f80000 Loading Device Tree to 8f321000, end 8f32c1b5 . OK Starting kernel . 0.000000 Booting Linux on physical CPU 0x0 0.000000 Linux version 3.12.10-ti2013.12.01 (gyn-rootubuntu) (gcc versio4 0.000000 CPU: ARMv7 Processor 413fc082 revision

温馨提示

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

最新文档

评论

0/150

提交评论