0x01800000 -- 0x03000000 :\flash partition 6\0x00300000 -- 0x04000000 :\flash partition 7\
kernel commal line : noinitrd root=/dev/mtdblock2 console = ttySAC0 rootfstype=jffs2 由上面看出,内核会到NAND Flash 的0x00400000 ~ 0x00800000 区间来挂载根文件系统,但事实上通过u-boot烧写根文件系统时,是将其烧写到Nand Flash 的0x00400000 ~ 0x04000000 这个区间。所以内核不能成功挂载根文件系统。因此,必须修改内核对Nand Flash的分区定义,让第3个分区位于0x00400000-0x04000000这个区间。
修改 arch /arm/plat-s3c24xx/common-smdk.c文件 ,将static struct mtd_partition ....{}函数做如下修改,这样一来,整个Nand Flash 被划分为4个分区。 第一个分区大小1MB,存放u-boot; 第二个分区大小3MB,存放kernel; 第三个分区大小60MB,存放根文件系统;
第四个分区从第64M开始一直到Nand Flash的最后,可用于扩展。 static struct mtd_partition smdk_default_nand_part[ ]={ [ 0 ] = {
.name = \ .size = SZ_1M, . offset = 0, }, [ 1 ] = {
.name = \ . offset = SZ_1M,
.size = SZ_2M + SZ_1M, }, [ 2] = {
.name = \filesystem \ . offset = SZ_4M,
.size = SZ_64M - SZ_4M, }, [ 3 ] = {
.name = \ . offset = SZ_64M,
.size = MTDPART_SIZE_FULL, } };
内核Kconfig 与 Makefile 文件分析
分类: 嵌入式 2012-04-25 11:36 60人阅读 评论(0) 收藏 举报
一.内核构造系统简介
内核是个复杂庞大的系统,对它进行配置、裁剪、编译原本非常地复杂和困难,但现在却只需要简单的两个命令:(1)make menuconfig ;(2)make uImage 就搞定了,原因是在其背后有一个设计精巧的内核构造系统帮助我们精确的完成了各项任务。内核构造系统最关键的组成元素就是各个目录下的Kconfig 文件和 Makefile文件,本节将对这两类文件进行介绍,以使大家了解内核构造系统的基本情况,从而能够修改它们,以完成向内核中添加功能组件的目的。
二. Kconfig 文件精解
* Kconfig 文件的作用是:
1. 控制make menuconfig 时, 出现的配置选项;
2.根据用户配置界面的选择,将配置结果保存在.config 配置文件(该文件将提供给Makefile使用,用以决定要编译的内核组件以及如何编译)。
初始Kconfig文件是arch /arm/Kconfig ( Kconfig文件的语法和语义,详情可查阅内核源码中的Documentation /kbuild/kconfig-language.txt 文件 ) (一)Kconfig 文件的基本要素:config 条目(entry) config YAFFS_FS
tristate \file system support \ default y
depends on MTD_BLOCK select YAFFS_YAFFS1 select YAFFS_YAFFS2 help
YAFFS2 , or Yet Another Flash Filing System , is a filing system
optimised for NAND Flash chips.
To compile the YAFFS2 File system support as a module, choose M here :the module will be called yaffs2. If unsure , say N 上面的config 条目,各部分的含义是:
(1) YAFFS_FS为变量名,将在.config 中以CONFIG_YAFFS_FS=y 或 n 的形式出现,如图
(2)tristate 为出现在配置菜单中的文字,没有它,将使得用户不能在配置界面中显示并配置它,同时它也为变量取值的类型,可为y 、n 、m (3)default :为变量默认值,可被用户设置值覆盖。
(4)depends on : 表示该变量必须在 MTD_BLOCK被设置的情况下才能进行设置,否则取值为n ,即使default为y
(注:原来我的.config 文件中出现的形式时#CONFIG_YAFFS_FS is not set ,所以一致后来在make menuconfig菜单中找不到YAFFS2 file system support的选项,就是因为这个原因,后来设置成CONFIG_YAFFS_FS=y还是没有
YAFFS2 file system support的选项,因为没有理解depends on MTD_BLOCK ,后来理解了,再次到.config文件中设置了此选项,菜单中终于有了\file system support\的选项)
(5)select :表示它将影响到变量YAFFS_FS,使得YAFFS_FS至少应该配置为y或m(如果它最终取值为y 或 m )
(6) help :中的文字将作为配置界面中的帮助信息。
附加说明:
*** 无depends on ,default 为y : 默认为y。 一般用于必须要设置的选项,此时不要设置prompt 。
*** 有depends on ,default 为y :所依赖的条目己设置,则默认为y ; 所依赖的条目未设置,则为n.
*** 有depends on ,default 为n : 所依赖的条目己设置,则默认为n; 所依赖的条目未设置,则为n.
*** 无depends on ,default 为n : 在为设置prompt的情况下,此选项想要被设置,需要由其他选项来select它。 二.Kconfig 中变量的取值类型
Kconfig 中变量取值类型总共有5种。其中做常见的是tristate 和 bool ,分别对应于make meuconfig 配置界面中< > 和 [ ]选项。 (1)tristate :可取y 、n 、m。
(2)bool (其为tristate的变体) :可取 y 、n
(3)string :取值为字符串,如:CONFIG_CMDLINE = \init = /bin/bash console =ttySAC0 \