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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

至于具体要怎么分,这样根据你的目标机的 Nand Flash 来定,不能一概而论。分区的 方法就是修改 arch/arm/plat-s3c24xx 目录下的 common-smdk.c 文件: 执行 gedit arch/arm/plat-s3c24xx/common-smdk.c 命令,找到: static struct mtd_partition smdk_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, }
/ #通过共享目录
为了方便使用 arm-linux-gcc,我们可以把它所在的目录添加到环境变量中 在 export PATH 前面插入 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)设置 Nand Flash 分区信息表 设置 Nand Flash 的分区信息表是为内核启动以后加载文件系统用的,可以将 Nand Flash 看成我们 PC 机的硬盘,对 Nand Flash 的分区看成是对硬盘的分区,硬盘可以分成 C 盘,D 盘之类,而 Nand Flash 则可以分成很多块,每块有不同的名字、大小和用途。下面 是对 Super-ARM 实验箱的 Nand Flash 进行分区的情况(参考表 5-1-1): � 第 0 块命名为 "uboot" ,它用来存放 u-boot.bin 映像,起始地址是 Nand Flash 的 0x000000,最大 0x30000 个字节;
var
�Байду номын сангаас�
第七行创建 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,下面是它的命令格式: mknod Name { b | c } Major Minor Name 是设备名称,“b”或“c”用来指定设备的类型是块设备还是字符设备。Major 指定设备的主设备号,Minor 是次设备号。 下面我们来创建嵌入式 Linux 系统中一些基本的设备文件, 必须是 root 权限, 命令如下: mknod -m 600 dev/console c 5 1 #创建系统控制台设备 mknod -m 666 dev/null c 1 3 #创建空设备, 任何写入都将被丢弃, 任何读取都得到 EOF mknod dev/fb0 c 29 0 #创建第一个帧缓冲设备,显示接口 mknod dev/tty c 5 0 #创建 TTY 设备 mknod dev/tty0 c 4 0 #创建当前虚拟控制台 mknod dev/tty1 c 4 1 mknod dev/tty2 c 4 2 mknod dev/tty3 c 4 3 mknod dev/tty4 c 4 4 ln -s dev/fb0 dev/fb #创建创建 fb 到 fb0 的链接 4、准备启动配置文件 Linux 启动所需要的文件有 etc/inittab、 etc/init.d/rcS、 etc/fstab 这三个文件(以下均假定当 前路径在/arm2410/rootfs)。 下面创建 inittab 文件,命令:gedit etc/inittab, 在文件中添加如下内容: ::sysinit:/etc/init.d/rcS ::askfirst:-/bin/sh ::respawn:-/bin/sh ::restart:/sbin/init ::ctrlaltdel:/sbin/reboot
Linux 内核移植
一、实验目的 根据前两次实验的基础上做 Linux 内核移植实验,为以后移植应用程序做准备(P84) 。 二、实验内容 在 Linux 下利用交叉编译工具配置编译 zImage 并烧写到 arm 开发箱中。 三、实验步骤 (1)实验准备 从 网 上 下 载 Linux 的 最 新 版 本 , 解 压 后 可 以 看 到 它 的 全 部 源 代 码 , 我 们 这 里 以 linux-2.6.24 为例,实现 Linux 的内核移植。 mkdir -p /arm2410/kernel cd /arm2410/kernel #wget ftp://192.168.4.210/crosstool/linux-2.6.24.tar.bz2 cp /mnt/hgfs/kernel/crosstool/linux-2.6.24.tar.bz2 . tar -xjvf linux-2.6.24.tar.bz2 cd linux-2.6.24 (2)修改顶层 Makefile 在顶层 Makefile 中先要定义交叉编译器,这里就使用我们第一次实验中构建的交叉编 译器。查找 ARCH,在 193 行左右修改确认 ARCH 和 CROSS_COMPILE 的值 ARCH ?=arm CROSS_COMPILE ?= arm-linux-
::shutdown:/bin/umount -a -r ::shutdown:/sbin/swapoff -a 分析该配置文件,可以知道 init 进程首先执行/etc/init.d/rcS 脚本文件,该文件马上就会 被创建。 � rcS
创建 rcS 文件,命令: mkdir etc/init.d gedit etc/init.d/rcS 在文件中添加如下内容: #!/bin/sh # mount all filesystem defined in "fstab" echo "#mount all......." /bin/mount -a 更改该文件的权限: chmod 775 etc/init.d/rcS 刚刚说到 rcS 文件是 init 进程执行的初始化命令脚本,在该文件中,笔者只加了一条命 令:“/bin/mount -a”,用来加载 fstab 文件中定义的文件系统,fstab 文件马上就被会创建。 � fstab
在 这 个 选 单 中 , 选 择 system type -->s3c2410 machines 中 的 smdk2410, 其 它 的 arch-machines 全部取消。
这个页面选择 s3c2410 Machines -->
这个页面把其它 machines 全部取消。
配置文件系统支持[可选]
default y depends on DEVFS_FS (5)配置内核 首先执行 make s3c2410_defconfig 命令获取 s3c2410_defconfig 文件中给定的配置。然 后执行 make menuconfig 命令配置内核 make s3c2410_defconfig make menuconfig 将出现以下图形配置界面:
� � �
第 1 块命名为"kernel",用来存放内核,起始地址是 Nand Flash 的 0x30000,最大 0x1D0000 个字节; 第 2 块命名为"rootfs", 用来存放根文件系统, 起始地址是 Nand Flash 的 0x200000, 最大 30M 字节; 第 3 块命名为 "ext-fs1" ,留给用户存放其他文件系统,起始地址是 Nand Flash 的 0x2000000,最大 32M 字节;
如果学生机上没有交叉编译环境, 先从教师机上下载交叉编译环境或者通过共享目录来 解压已经做好的交叉编译环境。 #wget ftp://192.168.4.210/u-boot/arm-linux-gcc.tar.bz2 #tar -xjvf arm-linux-gcc.tar.bz2 -C / tar -xjvf /mnt/hgfs/kernel/u-boot/arm-linux-gcc.tar.bz2 -C gedit /etc/profile
上图是支持 Ext3 文件系统选项 下面是 SD 卡支持选项
选中 mmc/SD card support 后进入里面
选中上面的选项后,插入 sd 卡时候会有提示
退出时候记得选择 yes 进行保存 (6)配置文件系统 为 arm 系统制作根文件系统的详细过程描述如下。 1、首先建立一个空根目录 我们的项目空间中将根文件系统规划在 rootfs 目录下,这个目录现在是空的,就把它作 为我们的空根目录,接下来我们就在这个目录下建立根文件系统。 2、在 rootfs 中建立文件系统的目录结构,所有命令如下: mkdir -p /arm2410/rootfs cd /arm2410/rootfs mkdir bin dev etc lib proc sbin sys usr mnt tmp chmod 0777 tmp #设置目录权限 mkdir usr/bin usr/lib usr/sbin lib/modules mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp mkdir var/lib var/lock var/log var/run var/tmp chmod 0777 var/tmp #设置目录权限 � � � � � � 第一行创建根文件系统目录。 第二行进入根文件系统目录。 第三行在根目录下创建一级目录 bin dev etc lib proc sbin sys usr mnt tmp var。 第四行更改 tmp 权限,使得用户只能修改、删除自己在本目录下创建的文件。 第五行创建 usr 目录下的子目录 第六行创建 mnt 目录下的子目录。
(4)添加 devfs 文件系统支持 为了我们的内核支持 devfs,以及在启动时能自动挂载/dev。编辑 fs/Kconfig:在 907 行 menu "Pseudo filesystems"下面添加如下代码: config DEVFS_FS bool "/dev file system support (OBSOLETE)" default y config DEVFS_MOUNT bool "Automatically mount at boot"
相关文档
最新文档