




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5.2 Linux系统启动流程分析Ubuntu的启动过程主要包括四个步骤:BIOS自检:识别主机上可以启动的设备,一次只能从一个设备上启动,如果一个启动设备失效,就可以使用下一个候选启动设备。通常是硬盘启动。启动驻留在硬盘主引导记录MBR中的引导程序Grub或lilo。Grub/lilo引导启动:如果主机中安装多个操作系统,用户通过Grub或lilo,引导启动Ubuntu Linux系统。此时操作系统还没有装入内存,引导程序只是将控制权转移给内核。装载Linux内核:在最初的引导过程完成之后,引导程序开始加载Linux内核,Ubuntu将Linux内核置于/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”目录下,在“/usr/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引导程序在操作系统内核运行之前运行一个程序,一般应被写入为0x00开始的物理地址。有了这个代码,可以初始化硬件设备,初始化如CPU,SDRAM,闪存,串口,以太网口等,下载文件到开发板,闪存擦除和编程,起到一定的引导和装载内核映像的作用。通常情况下,引导程序是依赖于硬件实现的,特别是在嵌入式系统。引导加载不同的体系结构需要不同的Bootloader,除了结构中,引导程序也取决于板级的嵌入式设备的具体结构。因此,建立一个共同的Bootloader几乎是不可能的,而是要建立一个总的框架则是可能的。Bootloader种类和分析:现在bootloader的种类是非常多的,下面的表中列出了几种,关于bootloader的种类这里介绍的比较简单,因为知道有多少种并没有什么太大的作用,之所以在这里列出是为了介绍下面bootloader的分类。Bootloader分类见下表6-1:表6-1 bootloader分类这里的分类实际上是依据上面的bootloader的操作模式来进行划分的,根据一个系统是否支持上面的下载模式我们这里将bootloader划分为bootloader和monitor。这里”bootloader”是指只是引导设备与执行主程序的固件,而”monitor”是指不仅拥有bootloader功能的,还能够进入下载模式的固件。在本系统中,使用U-Boot作为开发板的Boot Loader。拷贝“Linux-Android源码”目录下的“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内核,它是一个乏味的任务,主要包含修改启动代码,加载内核引导参数传递等。其基本结构如表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显示设备的类型,选项位于:- Device 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编译内核,生成的zImage位于: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 - 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启动开发板,修改内核启动参数,通过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_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 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/boot/zImage /tftpboot启动目标板,在目标板上完成如下操作:# cat /proc/mtddev: size erasesize namemtd0: 00100000 00020000 bootloadermtd1: 00300000 00020000 kernelmtd2: 00400000 00020000 rootfsmtd3: 0f800000 00020000 usrfs 6.3.3 Linux内核调试(1)修改driver/video/s3c-fb.c,在s3c_fb_probe函数中int ret=0;下增加下面语句:int *ptr =NULL;*ptr=0xff;(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 : 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 f 6.4 Linux文件系统移植Linux操作系统安装文件系统的选择过程;1)EXT2文件系统:ext2文件系统应该说是Linux早期的文件系统,但随着技术的发展,大多数Linux发行版目前不使用这个文件系统;如红帽和Fedora大多数都建议使用ext3,ext3文件系统是ext2的演变。支持ext2的反删除(取消删除),如果不小心删除的文件,可以恢复;ext2支持大文件;ext2文件系统的官方主页是:http://ext2.html。2)ext3文件系统:从ext2文件系统演变而来,ext3是Linux日志文件系统),ext3支持大型文件;它不支持反删除(反删除)操作;RedHat和Fedora一般使用ext3文件系统。3)ReiserFS文件系统: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 Linux虚拟文件系统VFS在嵌入式Linux应用中,主存储装置的RAM(DRAM,SDRAM)和ROM(常采用FLASH存储器),基于存储设备的类型通常使用的文件系统包括:jffs2的,YAFFS,CRAMFS,ROMFS,虚拟盘,RAMFS/ TMPFS等,对于移植到开发板的存储设备Nandflash来说,大多采用cramfs文件系统。移植步骤如下:(1)软件准备Busybox Busybox有一个很形象的称呼,那就是linux系统中的“瑞士军刀”,从这个称呼中看出,busybox是一个集多种功能于一身的工具。 Busybox在设计上就充分考虑了硬件资源受限的特殊工作环境。它采用一种很巧妙的办法减少自己的体积:所有的命令都通过“插件”的方式集中到一个可执行文件中。在busybox的编译过程中,可以非常方便地裁剪它的功能,类似于组态一样将所有的功能天添加或者删除,最后编译成一个可以使用的文件系统。Busybox的编译过程是先使用make menuconfig进行配置,在这一点上与内核的编译过程很相似。(2)源码下载我们选择的版本是busybox-1.17.3.tar.bz2下载路径为:/downloads/(3)解压源码$ tar xvf busybox-1.17.3.tar.bz2(4)进入源码目录$ tar xvf busybox-1.17.3.tar.bz2(5)配置源码$ make menuconfigBusybox 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 tmp 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 defaults 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重新编译linux内核源码。在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文件系统中设备文件的创建,在根文件系统中,有一个设备节点非常重要,需要必须创建,那就是在dev下创建console节点$ mknod dev/console c 5 1(6)cramfs文件系统镜像制作由于系统提供制作cramfs文件系统的工具,则可以利用。具体操作如下;$ mkfs.cramfs
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上下文属性风险控制-洞察及研究
- 数字艺术市场交易活跃度与元宇宙发展趋势2025年研究报告
- 数字艺术市场2025年交易活跃度报告:艺术市场与教育机构合作模式
- 教师咨询方案
- 江油清理隔油池施工方案
- 健康咨询方案中医
- 家具咨询方案
- 滨江食品安全培训课件
- 电瓶车安全生产培训课件
- 建筑防水施工方案设计
- 肿瘤患者疼痛的全面护理
- 组塔架线培训课件
- 新员工入职廉洁从业教育培训
- 中考语文一轮复习:标题的含义与作用(学生版)
- 美术课雕塑课件
- DB31/T 300-2018燃气燃烧器具安全和环保技术要求
- 2025农业银行笔试题库及答案
- 天使口腔矫正协议书
- 2025人教部编版语文四年级上册教学计划(含进度表)
- 模具开发技术协议书
- 冷色暖色美术课件
评论
0/150
提交评论