AM335x的linux内核移植.docx
- 文档编号:11569468
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:11
- 大小:89.25KB
AM335x的linux内核移植.docx
《AM335x的linux内核移植.docx》由会员分享,可在线阅读,更多相关《AM335x的linux内核移植.docx(11页珍藏版)》请在冰豆网上搜索。
AM335x的linux内核移植
摘要
随着时代的发展,人们的生活越来越离不开电子产品,特别是嵌入式电子产品。
嵌入式的发展越来越好,得益于硬件的发展和各类嵌入式系统的进步。
在众多的嵌入式系统中,最为让人熟悉的就是linux了。
所以,这次的课题就以linux内核为主题,使用的开发板是TI的beaglebonewhite。
关键词:
Linux移植,嵌入式,arm
1.嵌入式系统的概念…………………………………………4
1.1 嵌入式系统定义………………………………………………4
1.2 ATMEL9200开发平台……………………………………….4
2.BootLoader简介…………………………………………..4
2.1BootLoader概念……………………………………………..4
2.2BootLoader启动过程………………………………………..5
2.3常用的Bootloader…………………………………………….5
2.4u-boot移植…………………………………………………….5
3.嵌入式linux操作系统…………………………………….7
3.1嵌入式Linux…………………………………………………..7
3.2嵌入式Linux的特点………………………………………….7
3.3从Linux到嵌入式Linux……………………………………..8
4.基于BeagleBone的嵌入式linux系统移植……………9
4.1移植概念……………………………………………………….9
4.2Linux与移植相关内核结构…………………………………..9
4.3嵌入式Linux操作系统移植…………………………………9
5文件系统构建………………………………………………9
6把u-boot、linux内核、文件系统下载到SD卡中………………11
7启动开发板,链接pc,查看效果………………………………….11
8参考文献....………………………………………………………….13
1.嵌入式系统的概念
1.1 嵌入式系统定义
在信息科学技术爆炸式增长的今天,嵌入式系统早已经融入了我们生活的方方面面。
美国汽车大王福特公司的高级经理曾宣称,“福特出售的‘计算能力’已超过了IBM”。
这并不是一个哗众取宠或者夸张的说法,在真正感受这句话的震撼力之前,让我们先了解一下嵌入式系统(EmbeddedSystems)的定义:
以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
举例来说,大到油田的集散控制系统和工厂流水线,小到家用VCD机或手机,甚至组成普通PC终端设备的键盘、鼠标、软驱、硬盘、显示卡、显示器、Modem、网卡、声卡等均是由嵌入式处理器控制的,嵌入式系统市场的深度和广度,由此可见一斑,尽管如此,它的市场价值也许仍然超过了您的想象:
今天,嵌入式系统带来的工业年产值已超过了1万亿美元。
1.2 BeagleBone开发平台
BeagleBone是仅有信用卡大小的低成本Linux计算机,它与Internet相连并运行高级操作系统,例如Android4.0和UbuntuLinux。
BeagleBone包含大量I/O并使用 TISitara™AM335xARM®Cortex™-A8处理器为实时分析提供处理能力。
要进一步进行定制和扩展,可以使用 Cape插件板以轻松扩展BeagleBone的功能。
BeagleBone具有广泛的开源软件支持选项,包括社区支持的 ÅngströmLinux发行版、Ubuntu 或多个其他 Linux发行版。
它还支持 TIAndroidDevKit 和 TISitaraLinuxEZSDK。
TI支持的两个操作系统使您可以快速入门并操作,只需进行简单的设置即可获得开箱即用体验。
它们包括用于启动演示、基准和应用的GUI。
此外,您可以快速开始开发您自己的应用。
还通过嵌入的Adeneo支持WindowsEmbeddedCompact7。
BeagleBone是一个由社区支持的平台,可用作构建更完整系统的基础和社区软件基线的目标。
作为一种替代方案,德州仪器(TI)直接支持 AM335x入门套件或 AM335x评估模块。
2.BootLoader简介
2.1BootLoader概念
简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。
因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。
尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。
2.2BootLoader启动过程
系统上电后,先执行第一阶段代码,进行相应的初始化后,将Blob第二阶段代码复制到RAM地址bloc_abs_base,然后跳转到第二阶段开始执行。
在第二阶段中,从汇编跳转到C的Main()函数,继续进行如下工作:
外围的硬件初始化(串口,USB等);
将Flash中的kernel加载到DRAM的kernel区域;
将Flash中的ramdisk加载到DRAM的ramdisk区域;
根据用户选择,进入命令行模块或启动kernel。
2.3常用的Bootloader
(1)Blob
Blob是BootLoaderObject的缩写,是一款功能强大的Bootloader。
它遵循GPL,源代码完全开放。
Blob既可以用来简单的调试,也可以启动Linuxkernel。
Blob最初是Jan-DerkBakker和ErikMouw为一块名为LART(LinuxAdvancedRadioTerminal)的板子写的,该板使用的处理器是StrongARMSA-1100。
现在Blob已经被移植到了很多CPU上,包括S3C44B0。
(2)Armboot
Armboot是一个bootloader,是为基于ARM或者StrongARMCPU的嵌入式系统所设计的.它支持多种类型的Flash;允许映像文件经由bootp.dhcp.tftp从网络传输;支持从串口线下载S-record或者binary文件;允许内存的显示及修改;支持jffs2文件系统等。
(3)u-boot
U-Boot,全称UniversalBootLoader,是遵循GPL条款的开放源码项目。
从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。
其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。
但是U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌入式操作系统。
2.4u-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/下进行如下米命令进行默认的配置编译:
makeO=am335xCROSS_COMPILE=arm-linux-gnueabihf-ARCH=armam335x_evm
经过编译完成后,在当前目录下回有一个am335x目录生成,里面包含了u-boot启动映像u-boot.img文件和MLO文件。
以下是am335x的config.h的部分代码:
#ifndef__CONFIG_AM335X_EVM_H
#define__CONFIG_AM335X_EVM_H
#include
#defineMACH_TYPE_TIAM335EVM3589/*Untilthenextsync*/
#defineCONFIG_MACH_TYPEMACH_TYPE_TIAM335EVM
/*ClockDefines*/
#defineV_OSCK24000000/*ClockoutputfromT2*/
#defineV_SCLK(V_OSCK)
/*CustomscriptforNOR*/
#defineCONFIG_SYS_LDSCRIPT"board/ti/am335x/u-boot.lds"
/*Always128KiBenvsize*/
#defineCONFIG_ENV_SIZE(128<<10)
#defineCONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
#ifndefCONFIG_SPL_BUILD
#defineCONFIG_EXTRA_ENV_SETTINGS\
"loadaddr=0x80200000\0"\
"fdtaddr=0x80F80000\0"\
"fdt_high=0xa0000000\0"\
"boot_fdt=try\0"\
"rdaddr=0x81000000\0"\
"bootpart=0:
2\0"\
"bootdir=/boot\0"\
"bootfile=zImage\0"\
"fdtfile=undefined\0"\
"console=ttyO0,115200n8\0"\
"partitions="\
"uuid_disk=${uuid_gpt_disk};"\
"name=rootfs,start=2MiB,size=-,uuid=${uuid_gpt_rootfs}\0"\
"optargs=\0"\
"dfu_alt_info_mmc="DFU_ALT_INFO_MMC"\0"\
"dfu_alt_info_emmc=rawemmcmmc03751936\0"\
"mmcdev=0\0"\
"mmcroot=/dev/mmcblk0p2ro\0"\
"mmcrootfstype=ext4rootwait\0"\
"usbroot=/dev/sda2rw\0"\
"usbrootfstype=ext4rootwait\0"\
"rootpath=/export/rootfs\0"\
"nfsopts=nolock\0"\
"static_ip=${ipaddr}:
${serverip}:
${gatewayip}:
${netmask}:
${hostname}"\
":
:
off\0"\
"ramroot=/dev/ram0rwramdisk_size=65536initrd=${rdaddr},64M\0"\
"ramrootfstype=ext2\0"\
"mmcargs=setenvbootargsconsole=${console}"\
"${optargs}"\
"root=${mmcroot}"\
"rootfstype=${mmcrootfstype}\0"\
"usbargs=setenvbootargsconsole=${console}"\
"${optargs}"\
"root=${usbroot}"\
"rootfstype=${usbrootfstype}\0"\
"spiroot=/dev/mtdblock4rw\0"\
"spirootfstype=jffs2\0"\
"spisrcaddr=0xe0000\0"\
"spiimgsize=0x362000\0"\
"spibusno=0\0"\
"spiargs=setenvbootargsconsole=${console}"\
"${optargs}"\
"root=${spiroot}"\
······
······
3.嵌入式linux操作系统
3.1嵌入式Linux
嵌入式Linux(EmbeddedLinux)是指对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(PortableDigitalEquippment)跟实际应用联系十分密切,采用的器件多种多样,良好的平台可移植性和系统可剪裁性对灵活的系统设计有着极其重要的意义,也为开发调试提供了方便。
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/arm和arch/asm-arm。
嵌入式系统是“硬件可裁剪的”,因此工程师设计的硬件电路有所不同,从而要根据具体的硬件电路进行相应的内核电码移植。
4.2Linux与移植相关内核结构
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/下
使用默认配置编译:
makeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-omap2plus_defconfig
makeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-zImage
编译完成后,会在目录./arch/arm/boot/下生成zImage文件。
在arch/arm/boot/dts下有相应的devicetree文件。
如果不适用默认提供的filesystem,则需要用到相应开发板的dtb文件。
如beaglebone需要am335x-bone.dtb。
把内核和对应dtb文件复制到filesystem的/boot目录下。
如果自定义配置的话,可以用menuconfig的图形界面进行配置
makeARCH=armCROSS_COMPILE=arm-linux-gunueabihf-menuconfig
5文件系统构建
到~/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–con–D/dev/ttyUSB0即可连接成功。
按一下复位键。
即可看到开发板上的系统正在启动。
输入默认的用户ID:
root即可登陆。
启动时的代码打印内容如下:
U-BootSPL2013.10-g78d8ebd(Mar302014-20:
46:
34)
NoACpower,disablingfrequencyswitch
readingargs
spl:
errorreadingimageargs,err--1
readingu-boot.img
readingu-boot.img
U-Boot2013.10-00189-g78d8ebd(Dec232014-12:
26:
16)
I2C:
ready
DRAM:
256MiB
NAND:
0MiB
MMC:
OMAPSD/MMC:
0,OMAPSD/MMC:
1
***Error-NoValidEnvironmentAreafound
***Warning-badCRC,usingdefaultenvironment
Net:
cpsw,usb_ether
Hitanykeytostopautoboot:
0
mmc0iscurrentdevice
Scanningmmc0...
4117600bytesreadin580ms(6.8MiB/s)
33206bytesreadin59ms(548.8KiB/s)
mmc0iscurrentdevice
SD/MMCfoundondevice0
readinguEnv.txt
**UnabletoreadfileuEnv.txt**
4117600bytesreadin580ms(6.8MiB/s)
33206bytesreadin59ms(548.8KiB/s)
Kernelimage@0x80200000[0x000000-0x3ed460]
##FlattenedDeviceTreeblobat80f80000
Bootingusingthefdtblobat0x80f80000
LoadingDeviceTreeto8f321000,end8f32c1b5...OK
Startingkernel...
[0.000000]BootingLinuxonphysicalCPU0x0
[0.000000]Linuxversion3.12.10-ti2013.12.01(gyn-root@ubuntu)(gccversio4
[0.000000]CPU:
ARMv7Processor[413fc082]revision2(ARMv7),cr=10c53c7d
[0.000000]CPU:
PIPT/VIPTnonaliasingdatacache,VIPTaliasinginstructie
[0.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AM335x linux 内核 移植