zoukankan      html  css  js  c++  java
  • linux驱动移植(nand,yaffs2)

    原文:http://blog.sina.com.cn/s/blog_7090b8670101b0bi.html

    linux驱动移植(nand,yaffs2)

    在linux操作系统的顺利移植之后,linux的内核虽然在板子上跑了起来,但是此时linux还不支持板子的的各个硬件,比如说lcd,摄像头,声卡,usb等模块,我们必须要在板子上装入驱动程序后,才能上这些硬件在linux操作系统下工作。

           这些驱动在内核中都有驱动的源码,我们要做的就是将这些驱动源码编译到内核中,当然在编译之前是需要对驱动源码做相关的修改的,因为我们的硬件和内核中的驱动很有可能是不匹配的。在对驱动进行编译的时候,我们还要有选择的去挑选一些我们需要的驱动,把我们不需要的驱动舍弃,称之为裁剪内核。

           首先必须要开发板的linux操作系统支持nandflash和挂载上yaffs2文件系统,只有挂载了yaffs2文件系统的操作系统才能算是完整的操作系统。

           为什么驱动是在内核中修改的呢?那是因为内核就操作系统,就是用来管理各硬件设施的。

    (一)   支持nandflash的驱动:

    Linux新版本的内核中提供了支持大页nand的驱动。这对我们nand驱动的移植就很方便了,我们只要在内核中找到相应的驱动并进行一些修改即可。

    (1)       修改内核中nand的分区(MTD分区)表

    修改:arch/arm/plat-s3c24xx/common-smdk.c文件,在第110行:

    这里我们要使nandflash同时支持64M,256M或更高容量。

           

    [0] = {

    .name = "boot",             name就是分区名,可以随便取。

    .offset = 0,                offset是偏移量,就是分区的起始地址。

    .size = SZ_1M,              size就是此分区的大小

    },

    [1] = {

    .name = "kernel",

    .offset = SZ_1M + SZ_128K,

    .size = SZ_4M,

    },

    [2] = {

    .name = "yaffs2",

    .offset = SZ_1M + SZ_128K + SZ_4M,

    .size = SZ_256M - SZ_4M - SZ_1M – SZ_128K, }

    #endif

    };

    第一个分区是boot分区(1M),就是存放uboot的。第二个分区是kernel分区(4M),是存放os内核的。第三个分区是yaffs2(根文件系统分区)。

    现在来说下分区的概念:分区有两种意义上的分区,一个是内核的MTD分区,一个是uboot的分区。两者都是和nand的分区相关的,但却不能等同。在内核中,Nand上面划分了一些分区,这些分区称之为MTD分区,都可以通过linux系统中的设备文件来访问。所以在内核中必须有MTD对uboot,内核映像,文件系统在nand上的分区信息。而uboot的分区则是nand的实际分区,在系统上电后通过sram将uboot放到内存中运行,并初始化各引导程序,和空间地址。这时的空间地址是nandflash的真实地址。而内核启动后所执行的不说从uboot中去读地址,而是从内核MTD分区地址中在读地址,因此内核MTD分区与uboot的分区必须相同。

    (2)     修改nand的匹配时间(查芯片手册)

    (3)     修改Kconfig文件,在配置时选择NAND类型。让内核选择支持哪种容量的nandflash

    (4)     配置内核,支持nandflash。

    这些过程实际上就是在修改内核中的nand驱动源码,然后在修改编译选项,最后自己用make menuconfig来配置,最后在linux的集成开发环境下编译内核生成映像文件,下载到arm开发板上。这样的内核就支持nand的了啦。

    (二)  yaffs2文件系统移植

    (1)下载yaffs2源码(在光盘资料/源码包/其他软件源码/目录下)

    解压,进入yaffs2目录:

    #tar xzvf yaffs2.tar.gz

    #cd cvs/yaffs2/

    (2)给内核打上yaffs2文件系统的补丁,执行:

    #./patch-ker.sh c /………/linux-2.6.31/ ?这个是你的内核源码的目录

    这时内核源码fs目录下多了一个yaffs2目录,同时Makefile文件和Kconfig文件也增加了yaffs2的配置和编译条件。

               (3)最后利用uboot烧如写好的yaffs2文件系统

  • 相关阅读:
    内存缓存 原理 实现
    ssh 内在溢出
    android 解析XML方式(三)
    android 解析XML方式(二)
    android 解析XML方式(一)
    (三)、
    (二)、SSL证书
    (一)、http原理
    httpsClient实例
    飞信免费发送接口API的测试 httpClient
  • 原文地址:https://www.cnblogs.com/ganrui/p/3796801.html
Copyright © 2011-2022 走看看