ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:429.75KB ,
资源ID:3519964      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3519964.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于三星S5PV210上的LinuxKernel的移植.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于三星S5PV210上的LinuxKernel的移植.docx

1、基于三星S5PV210上的LinuxKernel的移植5.2 Linux系统启动流程分析Ubuntu的启动过程主要包括四个步骤:BIOS自检:识别主机上可以启动的设备,一次只能从一个设备上启动,如果一个启动设备失效,就可以使用下一个候选启动设备。通常是硬盘启动。启动驻留在硬盘主引导记录MBR中的引导程序Grub或lilo。Grub/lilo引导启动:如果主机中安装多个操作系统,用户通过Grub或lilo,引导启动Ubuntu Linux系统。此时操作系统还没有装入内存,引导程序只是将控制权转移给内核。装载Linux内核:在最初的引导过程完成之后,引导程序开始加载Linux内核,Ubuntu将L

2、inux内核置于/boot目录下。系统初始化:内核的初始化阶段将启动系统进程和脚本,init进程是系统开始的第一个工作,它是其他所有进程的父进程,并一直处于运行状态。使用top命令查看进程,可以发现init进程id号永远是第一个。init进程读取初始化脚本,完成系统相关的管理任务。图 5-1 linux系统启动流程6 基于S5PV210的linux内核移植6.1 交叉开发环境的搭建在自己的linux中建立交叉开发环境:安装交叉编译工具链:a 解压“Linux-Androidtoolchain”目录下的“arm-none-eabi-4.2.2.tgz”到根“/usr/local”目录下,在“/u

3、sr/local”目录下会生成“arm”目录:执行命令:#tar zxvf arm-none-eabi-4.2.2.tgzb 修改环境变量“PATH”:$ sudo vim /etc/environment将路径(下面的红色字体,不加引号)添加到PATH变量的最后面,省略号代表原来PATH的值:PATH=:/usr/local/arm/4.2.2-eabi/usr/bin”c 保存退出后执行:$ source /etc/ environment这样修改的环境变量会立即生效,于是我们就得到交叉编译工具:6.2 Boot Loader移植Bootloader引导程序在操作系统内核运行之前运行一个程

4、序,一般应被写入为0x00开始的物理地址。有了这个代码,可以初始化硬件设备,初始化如CPU,SDRAM,闪存,串口,以太网口等,下载文件到开发板,闪存擦除和编程,起到一定的引导和装载内核映像的作用。通常情况下,引导程序是依赖于硬件实现的,特别是在嵌入式系统。引导加载不同的体系结构需要不同的Bootloader,除了结构中,引导程序也取决于板级的嵌入式设备的具体结构。因此,建立一个共同的Bootloader几乎是不可能的,而是要建立一个总的框架则是可能的。Bootloader种类和分析:现在bootloader的种类是非常多的,下面的表中列出了几种,关于bootloader的种类这里介绍的比较简

5、单,因为知道有多少种并没有什么太大的作用,之所以在这里列出是为了介绍下面bootloader的分类。Bootloader分类见下表6-1:表6-1 bootloader分类这里的分类实际上是依据上面的bootloader的操作模式来进行划分的,根据一个系统是否支持上面的下载模式我们这里将bootloader划分为bootloader和monitor。这里”bootloader”是指只是引导设备与执行主程序的固件,而”monitor”是指不仅拥有bootloader功能的,还能够进入下载模式的固件。在本系统中,使用U-Boot作为开发板的Boot Loader。拷贝“Linux-Android源

6、码”目录下的“uboot-s5pv210.tar.bz2”到目标目录下,然后执行命令:# tar jxvf uboot-s5pv210.tar.bz2# make smdkc100_config# make在源码根目录(uboot-samsung)下会生成“u-boot.bin”。6.3 linux内核镜像移植Linux内核的移植,是针对Linux的操作系统做在目标平台上安装后必须裁剪才能正常运行特定的目标平台。Linux内核第一阶段的引导,初始化相关的代码首先被执行,初始化硬件寄存器,存储器等。然后控制代码转向内核,在代码移植工作中,主要改变在体系结构相关的部分。移植Linux内核,它是一个

7、乏味的任务,主要包含修改启动代码,加载内核引导参数传递等。其基本结构如表6-2所示:表6-2 linux体系结构系统调用接口进程管理内存管理内存管理调度程序块设备管理字符设备管理TCP/IP协议网络事务管理体系结构相关代码硬件平台移植步骤:1、拷贝“Linux源码”目录下的“Linux-2.6.29-samsung.tar.bz2”到目标目录下,然后解压# tar jxvf Linux-2.6.29-samsung.tar.bz22、执行:# make menuconfig进入配置界面配置内核编译选项,需要注意的是要按照自己的实际情况选择Framebuffer显示设备的类型,选项位于:- De

8、vice Drivers - Graphics support - Support for frame buffer devices (FB =y) - S3C Framebuffer support (FB_S3C =y) - Select LCD Type ( =y)如果开发板接480*272的LCD屏,应该选择:(X)Innolux 4.3 inch (480x272)如果开发板接800*600的VGA显示器,应该选择:(X) VGA 800x600如果开发板接1024*768的VGA显示器,应该选择:(X) VGA 1024x7683、执行:# make zImage编译内核,生成的z

9、Image位于:arch/arm/boot/下6.3.1 Linux网卡驱动移植网卡是嵌入式产品最常用的设备,这里我们需要完成网卡驱动的移植。FS_S5PV210使用的是DM9000网卡,我们通过这个实验能够了解如何在内核中添加网卡驱动及网络功能的基本配置。平台设备列表的添加:在smdkc100_device结构体数组中添加如下内容: #if defined(CONFIG_DM9000) &s5pv210_device_dm9000, #endif配置内核$ make menuconfig网络配置:* Networking support (NEW) -Networking options -

10、 Packet socketUnix domain sockets* TCP/IP networking* IP: multicasting * IP: kernel level autoconfiguration* IP: BOOTP support 网卡驱动配置Device Drivers -* Network device support -* Ethernet (10 or 100Mbit) - DM9000 support 编译内核,并拷贝到tftpboot目录下:$ make zImage$ cp arch/arm/boot/zImage /tftpboot启动开发板,修改内核启动

11、参数,通过NFS方式挂载根文件系统。6.3.2 Linux文件系统编译Nand flash 是嵌入式系统最常用的外部存储设备,这里介绍Nand flash驱动移植的过程。 添加针对我们平台的Nand flash驱动,拷贝s3c_nand.c到drivers/mtd/nand下,拷贝regs-nand.h到arch/arm/mach-s5pv210/include/mach下,针对平台上的nand flash设备,修改drivers/mtd/nand/nand_base.c文件。添加平台设备列表在smdkc100_device结构体数组中添加如下内容:#if defined(CONFIG_MTD

12、_NAND_S3C)&s5pv210_device_nand,#endif修改arch/arm/plat-samsung/include/plat/nand.h添加如下内容:struct s3c_nand_mtd_info uint chip_nr;uint mtd_part_nr;struct mtd_partition *partition;配置内核$ make menuconfigDevice Drivers - Memory Technology Device (MTD) support - * MTD partitioning support Caching block device

13、 access to MTD devices NAND Device Support - NAND Flash support for S3C SoC * S3C NAND Hardware ECCFile Systems -Partition Types - * Advanced partition selection * PC BIOS (MSDOS partition tables) support * BSD disklabel (FreeBSD partition tables) support编译内核并拷贝到tftpboot下$ make zImage$ cp arch/arm/b

14、oot/zImage /tftpboot启动目标板,在目标板上完成如下操作:# cat /proc/mtddev: size erasesize namemtd0: 00100000 00020000 bootloadermtd1: 00300000 00020000 kernelmtd2: 00400000 00020000 rootfsmtd3: 0f800000 00020000 usrfs6.3.3 Linux内核调试(1)修改driver/video/s3c-fb.c,在s3c_fb_probe函数中int ret=0;下增加下面语句:int *ptr =NULL;*ptr=0xff

15、;(3)编译内核下载到开发板上,内核启动会出现如类似下信息:Unable to handle kernel NULL pointer dereference at virtual address 00000000LR is at platform_drv_probe+0x1c/0x24pc : lr : psr: a0000013sp : cfc29f0cip : cfc457c0 fp : 00000000r10: 00000000 r9 : 00000000r8 : c03ad4f8r7 :c03a93d0r6 : c03a93d0r5 : c0395258r4 : 00000000r3

16、: 000000ffr2 : cfc28000r1 : 00000000r0 : c0395250可以看出使用了空指针。找出函数调用关系:PC is at s3c_fb_probe+0xc/0x67c,表示出错指令为s3c_fb_probe函数中偏移为0xc的指令。pc:表示出错指令的地址为c0290a28。(5)对于大多数情况,从反汇编代码定位到C代码并不会如此容易,需要有较强的阅读汇编代码的能力。(6)另外一种方法是通过addr2line去定位arm-none-linux-gnueabi-addr2line 0xc001abc4 -e vmlinux f6.4 Linux文件系统移植Lin

17、ux操作系统安装文件系统的选择过程;1)EXT2文件系统:ext2文件系统应该说是Linux早期的文件系统,但随着技术的发展,大多数Linux发行版目前不使用这个文件系统;如红帽和Fedora大多数都建议使用ext3,ext3文件系统是ext2的演变。支持ext2的反删除(取消删除),如果不小心删除的文件,可以恢复;ext2支持大文件;ext2文件系统的官方主页是:http:/2)ext3文件系统:从ext2文件系统演变而来,ext3是Linux日志文件系统),ext3支持大型文件;它不支持反删除(反删除)操作;RedHat和Fedora一般使用ext3文件系统。3)ReiserFS文件系统:

18、reiserfs文件系统是一个很好的文件系统,能支持大文件,支持恢复删除(反删除)操作;ReiserFS文件系统性能最出色的是:几乎能恢复90以上的数据,有时可以恢复到100。支持Linux的文件系统,目前Linux支持几乎所有的类Unix文件系统,除了我们在安装Linux操作系统被选中的ext3,reiserfs的和ext2,支持其他Unix操作系统的文件系统,当然,Linux还支持Windows文件系统NTFST和fat文件系统,但不支持NTFS的写入;对于FAT文件系统支持读写Linux,另外Linux还支持网络文件系统,如NFS等;Linux的文件系统见图6-1所示。图6-1 Linu

19、x虚拟文件系统VFS在嵌入式Linux应用中,主存储装置的RAM(DRAM,SDRAM)和ROM(常采用FLASH存储器),基于存储设备的类型通常使用的文件系统包括:jffs2的,YAFFS,CRAMFS,ROMFS,虚拟盘,RAMFS/ TMPFS等,对于移植到开发板的存储设备Nandflash来说,大多采用cramfs文件系统。移植步骤如下:(1)软件准备BusyboxBusybox有一个很形象的称呼,那就是linux系统中的“瑞士军刀”,从这个称呼中看出,busybox是一个集多种功能于一身的工具。Busybox在设计上就充分考虑了硬件资源受限的特殊工作环境。它采用一种很巧妙的办法减少自

20、己的体积:所有的命令都通过“插件”的方式集中到一个可执行文件中。在busybox的编译过程中,可以非常方便地裁剪它的功能,类似于组态一样将所有的功能天添加或者删除,最后编译成一个可以使用的文件系统。Busybox的编译过程是先使用make menuconfig进行配置,在这一点上与内核的编译过程很相似。(2)源码下载我们选择的版本是busybox-1.17.3.tar.bz2下载路径为:(3)解压源码$ tar xvf busybox-1.17.3.tar.bz2(4)进入源码目录$ tar xvf busybox-1.17.3.tar.bz2(5)配置源码$ make menuconfigB

21、usybox Settings - Build Options - * Build with Large File Support (for accessing files 2 GB) (arm-none-linux-gnueabi-) Cross Compiler prefix () Additional CFLAGS编译:$ make安装:busybox默认安装路径为源码目录下的_install$ make install 进入安装目录下:$ cd _install$ lsbin linuxrc sbin usr添加其他需要目录$ mkdir dev etc mnt proc var tm

22、p sys root添加库,将交叉工具链中的库文件拷贝到_install目录下$ cp /home/linux/toolchain/arm-none-linux-gnueabi/lib/ ./删除lib下的所有目录、.o文件和.a文件,对库进行瘦身以减小文件系统的大小$ arm-none-linux-gnueabi-strip lib/*添加linux系统的启动文件,在etc下添加文件inittab,文件内容如下:在etc下添加文件fstab,文件内容如下:#device mount-point type options dump fsckorderproc /proc proc defaul

23、ts 0 0tmpfs /tmp tmpfs defaults 0 0sysfs /sys sysfs defaults 0 0tmpfs /dev tmpfs defaults 0 0在本次的移植中我们挂载内核的文件系统有三个,分别是proc、sysfs和tmpfs,linux内核中默认都支持proc和sysfs,tmpfs是没有支持的,我们需要添加tmpfs的支持。修改内核配置:File systems - * Virtual memory file system support (former shm fs) * Tmpfs POSIX Access Control Lists重新编译l

24、inux内核源码。在etc下创建init.d目录,并在init.d下创建rcS文件,在rcS写入内容:#!/bin/sh/bin/mount -a为rcS添加可执行权限:# chmod +x init.d/rcS在etc下添加profile文件,其中文件的内容为:#!/bin/shexport HOSTNAME=farsightexport USER=rootexport HOME=root#export PS1=uh W$ export PS1=$USER$HOSTNAME W# PATH=/bin:/sbin:/usr/bin:/usr/sbin文件系统中设备文件的创建,在根文件系统中,有

25、一个设备节点非常重要,需要必须创建,那就是在dev下创建console节点$ mknod dev/console c 5 1(6)cramfs文件系统镜像制作由于系统提供制作cramfs文件系统的工具,则可以利用。具体操作如下;$ mkfs.cramfs rootfs rootfs.cramfs(1)将rootfs.cramfs拷贝到/tftpboot目录下$ cp rootfs.cramfs /tftpboot(2)将rootfs.cramfs烧写到nand flash的第三个分区上u-boot下执行如下命令# tftp 30008000 rootfs.cramfs# nand erase

26、500000 800000# nand write 30008000 500000 800000(3)重新设置u-boot启动参数# setenv bootcmd tftp 33000000 zImage; go 33000000# setenv bootargs root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200 # savenv启动开发板,进行测试。7 测试Linux 内核在硬件平台上移植成功后,编写简单的驱动程序进行测试。本设计运用c程序语言编写了画面切换的驱动程序,编译成功后下载到开发板上,观察是否得到预测结果。得到结果如下

27、图所示:图7-1 内核移植测试画面切换功能实现,说明linux内核移植成功。8 结论本设计完成了修改linux内核与硬件相关部分后将其移植到目标平台三星S5PV210的工作,并且编写了简单的驱动程序对移植成果进行测试。应用了大学所学的c语言、arm及单片机的知识,达到了制作毕业设计的目的。完成本毕业设计需要研究和理解linux内核源码,并对三星S5PV210硬件平台的结构及功能有所认识,只有掌握这些相关知识,才能使自己修改的内核源码与S5PV210匹配,得到理想结果。内核修改工作繁琐,在完成设计的过程中必须认真细心,否则会遇到很多问题。有时候甚至因为一个参数未能成功修改导致设计失败。本设计的结果提供了一个嵌入式开发平台,最终目的是希望利用此平台进行设计,开发更多功能的嵌入式产品。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1