linux内核移植、根文件系统、busybox

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Linux内核移植一、实验目的根据前两次实验的基础上做Linux内核移植实验,为以后移植应用程序做准备(P84)。二、实验内容在Linux下利用交叉编译工具配置编译zImage并烧写到arm开发箱中。三、实验步骤(1)实验准备从网上下载Linux的最新版本,解压后可以看到它的全部源代码,我们这里以linux-2.6.24为例,实现Linux的内核移植。mkdir-p/arm2410/kernelcd/arm2410/kernel#wget(2)修改顶层Makefile在顶层Makefile中先要定义交叉编译器,这里就使用我们第一次实验中构建的交叉编译器。查找ARCH,在193行左右修改确认ARCH和CROSS_COMPILE的值ARCH?=armCROSS_COMPILE?=arm-linux-如果学生机上没有交叉编译环境,先从教师机上下载交叉编译环境或者通过共享目录来解压已经做好的交叉编译环境。#wget通过共享目录为了方便使用arm-linux-gcc,我们可以把它所在的目录添加到环境变量中gedit/etc/profile在exportPATH前面插入PATH=/arm2410/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/bin/:$PATH这样一句,以后启动就可以直接使用arm-linux-gcc了。要使环境变量立马生效,可以使用下面的命令。source/etc/profile我们可以用arm-linux-gcc-v来查看交叉编译器版本,如果是4.1.1就是正确的。(3)设置NandFlash分区信息表设置NandFlash的分区信息表是为内核启动以后加载文件系统用的,可以将NandFlash看成我们PC机的硬盘,对NandFlash的分区看成是对硬盘的分区,硬盘可以分成C盘,D盘之类,而NandFlash则可以分成很多块,每块有不同的名字、大小和用途。下面是对Super-ARM实验箱的NandFlash进行分区的情况(参考表5-1-1):�第0块命名为uboot,它用来存放u-boot.bin映像,起始地址是NandFlash的0x000000,最大0x30000个字节;�第1块命名为kernel,用来存放内核,起始地址是NandFlash的0x30000,最大0x1D0000个字节;�第2块命名为rootfs,用来存放根文件系统,起始地址是NandFlash的0x200000,最大30M字节;�第3块命名为ext-fs1,留给用户存放其他文件系统,起始地址是NandFlash的0x2000000,最大32M字节;至于具体要怎么分,这样根据你的目标机的NandFlash来定,不能一概而论。分区的方法就是修改arch/arm/plat-s3c24xx目录下的common-smdk.c文件:执行geditarch/arm/plat-s3c24xx/common-smdk.c命令,找到:staticstructmtd_partitionsmdk_default_nand_part[],111行,在其中填入下面的内容(将原来的内容覆盖)[0]={.name=uboot,.size=0x30000,.offset=0,},[1]={.name=kernel,.offset=0x30000,.size=0x1D0000,},[2]={.name=rootfs,.offset=SZ_2M,.size=SZ_1M*30,},[3]={.name=ext-fs1,.offset=SZ_32M,.size=SZ_32M,}(4)添加devfs文件系统支持为了我们的内核支持devfs,以及在启动时能自动挂载/dev。编辑fs/Kconfig:在907行menuPseudofilesystems下面添加如下代码:configDEVFS_FSbool/devfilesystemsupport(OBSOLETE)defaultyconfigDEVFS_MOUNTboolAutomaticallymountatbootdefaultydependsonDEVFS_FS(5)配置内核首先执行makes3c2410_defconfig命令获取s3c2410_defconfig文件中给定的配置。然后执行makemenuconfig命令配置内核makes3c2410_defconfigmakemenuconfig将出现以下图形配置界面:在这个选单中,选择systemtype--s3c2410machines中的smdk2410,其它的arch-machines全部取消。这个页面选择s3c2410Machines--这个页面把其它machines全部取消。配置文件系统支持[可选]上图是支持Ext3文件系统选项下面是SD卡支持选项选中mmc/SDcardsupport后进入里面选中上面的选项后,插入sd卡时候会有提示退出时候记得选择yes进行保存(6)配置文件系统为arm系统制作根文件系统的详细过程描述如下。1、首先建立一个空根目录我们的项目空间中将根文件系统规划在rootfs目录下,这个目录现在是空的,就把它作为我们的空根目录,接下来我们就在这个目录下建立根文件系统。2、在rootfs中建立文件系统的目录结构,所有命令如下:mkdir-p/arm2410/rootfscd/arm2410/rootfsmkdirbindevetclibprocsbinsysusrmnttmpvarchmod0777tmp#设置目录权限mkdirusr/binusr/libusr/sbinlib/modulesmkdirmnt/etcmnt/jffs2mnt/yaffsmnt/datamnt/tempmkdirvar/libvar/lockvar/logvar/runvar/tmpchmod0777var/tmp#设置目录权限�第一行创建根文件系统目录。�第二行进入根文件系统目录。�第三行在根目录下创建一级目录bindevetclibprocsbinsysusrmnttmpvar。�第四行更改tmp权限,使得用户只能修改、删除自己在本目录下创建的文件。�第五行创建usr目录下的子目录�第六行创建mnt目录下的子目录。�第七行创建var目录下的子目录。�第八行更改var/tmp目录的权限。3、创建设备文件先了解一下Linux的设备:Linux中主要有2种类型的设备:字符设备(无缓冲且只能顺序存取)、块设备(有缓冲且可以随机存取)。每个设备都必须有主、次设备号,主设备号相同的设备是同类设备(使用同一个驱动程序)。这些设备中,有些设备是对实际存在的物理硬件的抽象,而有些设备则是内核自身提供的功能(不依赖于特定的物理硬件,又称为虚拟设备)。每个设备在/dev目录下都有一个对应的文件(节点)。可以通过cat/proc/devices命令查看当前已经加载的设备驱动程序的主设备号。你可以在你的宿主机上执行这个命令看看你的宿主机所拥有的设备文件,可以看到,Linux有很多很多的设备文件,在嵌入式Linux中并没有这么多的设备,下面用mknod命令创建一些主要设备文件。关于Linux的设备号:很多设备在Linux下已经有默认的主次设备号,如帧缓冲设备是Linux的标准字符设备,主设备号是29,如果Linux下有多个帧缓冲设备,那么这些帧缓冲设备的次设备号就从0~31(Linux最多支持32个帧缓冲设备)进行编号,比如fb0对应的次设备号就是0,fb1为1,类推。用户也可以创建自己的设备文件,比如下一篇章中我们要讨论的Led设备,需要注意的是用户自己的设备号不能与一些标准的系统设备号重叠。Linux下创建设备节点的命令是mknod,下面是它的命令格式:mknodName{b|c}MajorMinorName是设备名称,“b”或“c”用来指定设备的类型是块设备还是字符设备。Major指定设备的主设备号,Minor是次设备号。下面我们来创建嵌入式Linux系统中一些基本的设备文件,必须是root权限,命令如下:mknod-m600dev/consolec51#创建系统控制台设备mknod-m666dev/nullc13#创建空设备,任何写入都将被丢弃,任何读取都得到EOFmknoddev/fb0c290#创建第一个帧缓冲设备,显示接口mknoddev/ttyc50#创建TTY设备mknoddev/tty0c40#创建当前虚拟控制台mknoddev/tty1c41mknoddev/tty2c42mknoddev/tty3c43mknoddev/tty4c44ln-sdev/fb0dev/fb#创建创建fb到fb0的链接4、准备启动配置文件Linux启动所需要的文件有etc/inittab、etc/init.d/rcS、etc/fstab这三个文件(以下均假定当前路径在/arm2410/rootfs)。下面创建inittab文件,命令:geditetc/inittab,在文件中添加如下内容:::sysinit:/etc/init.d/rcS::askfirst:-/bin/sh::respawn:-/bin/sh::restart:/sbin/init::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount-a-r::shutdown:/sbin/swapoff-a分析该配置文件,可以知道init进程首先执行/etc/init.d/rcS脚本文件,该文件马上就会被创建。�rcS创建rcS文件,命令:mkdiretc/init.dgeditetc/init.d/rcS在文件中添加如下内容:#!/bin/sh#mountallfilesystemdefinedinfstabecho#mountall......./bin/mount-a更改该文件的权限:chmod775etc/init.d/rcS刚刚说到rcS文件是init进程执行的初始化命令脚本,在该文件中,笔者只加了一条命令:“/bin/mount-a”,用来加载fstab文件中定义的文件系统,fstab文件马上就被会创建。�fstab首先来看看/etc/fstab文件的作用,该文件存放的是系统中的文件系统信息。当正确的设置了该文件,则可以通过mount/directoryname命令来加载一个文件系统,每种文件系统都对应一个独立的行,每行中的字段都有空格或tab键分开。同时fsck、mount、umount的等命令都利用该程序。fstab文件格式如下:fs_specfs_filefs_typefs_optionsfs_dumpfs_pass�fs_spec:该字段定义希望加载的文件系统所在的设备或远程文件系统,对于NFS情况,格式一般为host:dir,例如:`210.43.111.211:/armnfs'。对于procfs,使用`proc'来定义。�fs_file:该字段描述文件系统所希望加载的目录点,对于swap设备,该字段为none;对于加载目录名包含空格的情况,用40来表示空格。�fs_type:定义了该设备上的文件系统类型。�fs_options-指定加载该设备的文件系统是需要使用的特定参数选项,多个参数是由逗号分隔开来。对于大多数系统使用defaults就可以满足需要。�fs_

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功