bate2000的个人空间 https://blog.eetop.cn/bate [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

VOD视频点播系统(五)

已有 1589 次阅读| 2008-3-25 23:39 |个人分类:VOD

2)建立Nand Flash分区表
/* 一个Nand Flash总共64MB, 按如下大小进行分区 */
/* NAND Controller */
static struct mtd_partition partition_info[] ={
         { /* 256kB */
                 name: "boot",
                 size: 0x00040000,
                 offset: 0x0,
         },{ /*1.75MB */
                 name: "kernel",
                 size: 0x001C0000,
                 offset: 0x00040000,
         }, { /* 30MB */
                 name: "root",
                 size: 0x01e00000,
                 offset: 0x00200000,       
         }, { /* 32MB */
                 name: "user",
                 size: 0x02000000,
                 offset: 0x02000000,
         }
};
name: 代表分区名字
size: 代表flash分区大小(单位:字节)
offset: 代表flash分区的起始地址(相对于0x0的偏移)
目标板计划分4个区,分别存放boot, kernel, rootfs以及以便以后扩展使用的用户文件系统空间。

3)加入Nand Flash分区
struct s3c2410_nand_set nandset ={
nr_partitions: 4,        /* 指明partition_info中定义的分区数目 */
partitions: partition_info, /* 分区信息表*/
};
4) 建立Nand Flash芯片支持
struct s3c2410_platform_nand superlpplatform={
         tacls:0,
         twrph0:30,
         twrph1:0,
         sets: &nandset,
         nr_sets: 1,
};
sets: 支持的分区集
nr_set:分区集的个数
6)加入Nand Flash芯片支持到Nand Flash驱动
另外,还要修改此文件中的s3c_device_nand结构体变量,添加对dev成员的赋值
struct platform_device s3c_device_nand = {
                 .name = "s3c2410-nand",  /* Device name */
                 .id = 1,  /* Device ID */
                 .num_resources = ARRAY_SIZE(s3c_nand_resource),
                 .resource = s3c_nand_resource, /* Nand Flash Controller Registers */
                 /* Add the Nand Flash device */
                 .dev = {
                          .platform_data = &superlpplatform
                 }
         };
name: 设备名称
id: 有效设备编号,如果只有唯一的一个设备为1,有多个设备从0开始计数.
num_resource: 有几个寄存器区
resource: 寄存器区数组首地址
dev: 支持的Nand Flash设备
 
3.2 指定启动时初始化
kernel启动时依据我们对分区的设置进行初始配置.
arch/arm/mach-s3c2410/mach-smdk2410.c文件
vi arch/arm/mach-s3c2410/mach-smdk2410.c
修改smdk2410_devices[].指明初始化时包括我们在前面所设置的flash分区信息
static struct platform_device *smdk2410_devices[] __initdata = {
         &s3c_device_usb,
         &s3c_device_lcd,
         &s3c_device_wdt,
         &s3c_device_i2c,
         &s3c_device_iis,
         /* 添加如下语句即可 */
         &s3c_device_nand,
};
保存,退出。
 
3.3 禁止Flash ECC校验
我们的内核都是通过UBOOT写到Nand Flash, UBOOT通过的软件ECC算法产生ECC校验码, 这与内核校验的ECC码不一样, 内核中的ECC码是由S3C2410Nand Flash控制器产生的. 所以, 我们在这里选择禁止内核ECC校验.
修改drivers/mtd/nand/s3c2410.c 文件:
vi drivers/mtd/nand/s3c2410.c
找到s3c2410_nand_init_chip()函数,在该函数体最后加上一条语句:
chip->eccmode = NAND_ECC_NONE;
保存,退出。
OK.我们的关于flash分区的设置全部完工.
 
四、支持启动时挂载devfs
为了我们的内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/devdevfs文件系统,修改fs/Kconfig文件
vi fs/Kconfig
找到menu "Pseudo filesystems"
添加如下语句:
config DEVFS_FS
         bool "/dev file system support (OBSOLETE)"
         default y
config DEVFS_MOUNT
         bool "Automatically mount at boot"
         default y
         depends on DEVFS_FS
 
五、配置编译内核
cp arch/arm/configs/smdk2410_defconfig .config
make smdk2410_defconfig
 
make menuconfig
smdk2410_defconfig基础上,我所增删的内核配置项如下:
这里约定“#”后面的是注释部分。
Loadable module support -->
         [*] Enable loadable module support
                 [*] Automatic kernel module loading
System Type --> [*] S3C2410 DMA support
Boot options --> Default kernel command string:
                 noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200
                 #说明:mtdblock2代表我的第3flash分区,它是我的rootfs     
                 # console=ttySAC0,115200使kernel启动期间的信息全部输出到串口0.
                 # 2.6内核对于串口的命名改为ttySAC0,但这不影响用户空间的串口编程。
                 # 用户空间的串口编程针对的仍是/dev/ttyS0
Floating point emulation -->
         [*] NWFPE math emulation
         This is necessary to run most binaries!!!
#接下来要做的是对内核MTD子系统的设置
Device Drivers -->
         Memory Technology Devices (MTD) -->
                 [*] MTD partitioning support
                 #支持MTD分区,这样我们在前面设置的分区才有意义
                 [*] Command line partition table parsing
                 #支持从命令行设置flash分区信息,灵活
                          RAM/ROM/Flash chip drivers -->
                                   <*> Detect flash chips by Common Flash
                                            Interface (CFI) probe
                                   <*> Detect nonCFI
                                   AMD/JEDECcompatible
                                            flash chips
                                   <*> Support for Intel/Sharp flash chips
                                   <*> Support for AMD/Fujitsu flash chips
                                   <*> Support for ROM chips in bus mapping
                          NAND Flash Device Drivers -->
                                   <*> NAND Device Support
                                   <*> NAND Flash support for S3C2410/S3C2440 SoC
         Character devices >
                 [*] Nonstandard serial port support
                 [*] S3C2410 RTC Driver
#接下来做的是针对文件系统的设置,本人实验时目标板上要上的文件系统是cramfs,故做如下配置
File systems -->
         <> Second extended fs support 
#去除对ext2的支持
         Pseudo filesystems -->
                 [*] /proc file system support
                 [*] Virtual memory file system support (former shm fs)
                 [*] /dev file system support (OBSOLETE)
                 [*] Automatically mount at boot (NEW)
                 #这里会看到我们前先修改fs/Kconfig的成果,devfs已经被支持上了
         Miscellaneous filesystems -->
                 <*> Compressed ROM file system support (cramfs)
                 #支持cramfs
         Network File Systems -->
                 <*> NFS file system support
保存退出,产生.config文件.
 
编译内核
make

layout-grid-align: none" align=left>注意:若编译内核出现如下情况

LD .tmp_vmlinux1

armlinuxld:

arch/arm/kernel/vmlinux.lds:1439: parse error

make: *** [.tmp_vmlinux1] Error 1

解决方法修改arch/arm/kernel/vmlinux.lds

vi arch/arm/kernel/vmlinux.lds

将文件尾2条的ASSERT注释掉;

/* ASSERT((__proc_info_end __proc_info_begin), "missing cpu support") */

/* ASSERT((__arch_info_end __arch_info_begin), "no machine record defined") */

然后重新make zImage即可。

  

   编译完成后会在arch/arm/boot/目录下生产zImage内核映象。zImage映象是可引导的,压缩的内核映象,就是我们要移植到开发板上的内核映象文件。

 

VOD视频点播系统(六)


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 0

    粉丝
  • 0

    好友
  • 0

    获赞
  • 0

    评论
  • 104

    访问数
关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-1-23 02:09 , Processed in 0.017856 second(s), 20 queries , Gzip On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部