网站导航: 首页 > 设计参考 > 正文 文章搜索
S3C2410上Jffs2的移植
 
文章编号:
081228162824
文章分类: 单片机 ARM
点 击:
...
关 键 词: S3C2410,Jffs2
文章来源:
网络,作者:赵印伟
摘 要:

参照llg写的关于hharm(e28f128flash)上的jffs2的移植
具体如下:

1.移植环境:
CPU:ARMS3C2410
Linux version:2.4.18
Flash:Intel E28F128

2.修改设备号
由于ROM设备和MTDBlock设备的主设备号(major)都是31,所以如果你不想把JFFS2作为根文件系统的话,必须修改他们之一的major。如果你要修改JFFS2的设备major,在uClinux-dist/linux-2.4.x/include/linux/mtd/mtd.h中把
#define MTD_BLOCK_MAJOR 31
改成
#define MTD_BLOCK_MAJOR 30

3.编写Maps文件
添加在flash上的map文件。在HHARM2410-R3/kernel/drivers/mtd/maps下添加flash(e28f128j3a-150)的map,我把握的文件内容贴上,仅供参考:
S3c2410_wpq.c

 
  1. /*  
  2. * Normal mappings of chips on Samsung s3c2410 in physical memory  
  3. */  
  4. #include <linux/module.h>   
  5. #include <linux/types.h>   
  6. #include <linux/kernel.h>   
  7. #include <asm/io.h>   
  8. #include <linux/mtd/mtd.h>   
  9. #include <linux/mtd/map.h>   
  10. #include <linux/mtd/partitions.h>   
  11. #include <linux/config.h>   
  12. #define WINDOW_ADDR 0x01000000 //基地址   
  13. #define WINDOW_SIZE 0x01600000 //flash大小 16M   
  14. #define BUSWIDTH 2   
  15. static struct mtd_info *mymtd;   
  16. __u8 s3c2410_read8(struct map_info *map, unsigned long ofs)   
  17. {   
  18.     return readb(map->map_priv_1 + ofs);   
  19. }   
  20. __u16 s3c2410_read16(struct map_info *map, unsigned long ofs)   
  21. {   
  22.     return readw(map->map_priv_1 + ofs);   
  23. }   
  24. __u32 s3c2410_read32(struct map_info *map, unsigned long ofs)   
  25. {   
  26.     return readl(map->map_priv_1 + ofs);   
  27. }   
  28. void s3c2410_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len)   
  29. {   
  30.     memcpy(to, (void *)(map->map_priv_1 + from), len);   
  31. }   
  32. void s3c2410_write8(struct map_info *map, __u8 d, unsigned long adr)   
  33. {   
  34.     writeb(d, map->map_priv_1 + adr);   
  35. }   
  36. void s3c2410_write16(struct map_info *map, __u16 d, unsigned long adr)   
  37. {   
  38.     writew(d, map->map_priv_1 + adr);   
  39. }   
  40. void s3c2410_write32(struct map_info *map, __u32 d, unsigned long adr)   
  41. {   
  42.     writel(d, map->map_priv_1 + adr);   
  43. }   
  44. void s3c2410_copy_to(struct map_info *map, unsigned long to, const void *from, ssize_t len)   
  45. {   
  46.     memcpy((void *)(map->map_priv_1 + to), from, len);   
  47. }   
  48. struct map_info s3c2410_map =    
  49. {   
  50. name: "s3c2410 flash device",   
  51. size: WINDOW_SIZE,   
  52. buswidth: BUSWIDTH,   
  53. read8: s3c2410_read8,   
  54. read16: s3c2410_read16,   
  55. read32: s3c2410_read32,   
  56. copy_from: s3c2410_copy_from,   
  57. write8: s3c2410_write8,   
  58. write16: s3c2410_write16,   
  59. write32: s3c2410_write32,   
  60. copy_to: s3c2410_copy_to,   
  61. map_priv_1: WINDOW_ADDR,   
  62. map_priv_2: -1,   
  63. };   
  64. //以下是分区的内容,当然要根据你自己的需要确定了   
  65. static struct mtd_partition s3c2410_partitions[] =    
  66. {   
  67.     {   
  68. name: "reserved for bootloader",   
  69. size: 0x040000,   
  70. offset: 0x0,   
  71. mask_flags: MTD_WRITEABLE,   
  72.     },   
  73.     {   
  74. name: "reserved for kernel",   
  75. size: 0x0100000,   
  76. offset: 0x040000,   
  77. mask_flags: MTD_WRITEABLE,   
  78.       },   
  79.       {   
  80. name: "reserved for ramdisk",   
  81. size: 0x400000,   
  82. offset: 0x140000,   
  83. mask_flags: MTD_WRITEABLE,   
  84.       },   
  85.       {   
  86. name: "jffs2(8M)",   
  87. size: 0x800000,   
  88. offset: 0x800000,   
  89.       }   
  90. };   
  91. int __init init_s3c2410(void)   
  92. {   
  93.     printk(KERN_NOTICE "s3c2410 flash device: %x at %x\n", WINDOW_SIZE, WINDOW_ADDR);   
  94.     s3c2410_map.map_priv_1 = (unsigned long)ioremap(WINDOW_ADDR, WINDOW_SIZE);   
  95.     //printk("0\n");   
  96.     if (!s3c2410_map.map_priv_1) {   
  97.         printk("Failed to ioremap/n");   
  98.         return -EIO;   
  99.     }   
  100.     //printk("1\n");   
  101.     mymtd = do_map_probe("jedec_probe", &s3c2410_map);   
  102.     if (!mymtd)   
  103.         mymtd = do_map_probe("cfi_probe", &s3c2410_map);   
  104.     //printk("2\n");   
  105.     if (mymtd) {   
  106.         mymtd->module = THIS_MODULE;   
  107.         mymtd->erasesize = 0x20000; //擦除的大小 INTEL E28F128J3A-150 是128kb   
  108.         return add_mtd_partitions(mymtd, s3c2410_partitions, sizeof(s3c2410_partitions) / sizeof(struct mtd_partition));   
  109.     }   
  110.     //printk("3\n");   
  111.     iounmap((void *)s3c2410_map.map_priv_1);   
  112.     return -ENXIO;   
  113. }   
  114. static void __exit cleanup_s3c2410(void)   
  115. {   
  116.     if (mymtd) {   
  117.         del_mtd_partitions(mymtd);   
  118.         map_destroy(mymtd);   
  119.     }   
  120.     if (s3c2410_map.map_priv_1) {   
  121.         iounmap((void *)s3c2410_map.map_priv_1);   
  122.         s3c2410_map.map_priv_1 = 0;   
  123.     }   
  124. }   
  125. module_init(init_s3c2410);   
  126. module_exit(cleanup_s3c2410);   

至于其文件内容及语句的含义网上相关的文章也有不少,参考一下吧。

4.将配置加入HHARM2410-R3/kernel/drivers/mtd/maps/Config.in

 
  1. if [ "$CONFIG_ARM" = "y" ]; then   
  2. dep_tristate ' CFI Flash device mapped on ARM Integrator/P720T' CONFIG_MTD_ARM_INTEGRATOR $CONFIG_MTD_CFI $CONFIG_ARCH_INTEGRATOR   
  3. dep_tristate ' Cirrus CDB89712 evaluation board mappings' CONFIG_MTD_CDB89712 $CONFIG_MTD_CFI $CONFIG_ARCH_CDB89712   
  4. dep_tristate ' CFI Flash device mapped on StrongARM SA11x0' CONFIG_MTD_SA1100 $CONFIG_MTD_CFI $CONFIG_ARCH_SA1100 $CONFIG_MTD_PARTITIONS   
  5. dep_tristate ' CFI Flash device mapped on DC21285 Footbridge' CONFIG_MTD_DC21285 $CONFIG_MTD_CFI $CONFIG_ARCH_FOOTBRIDGE $CONFIG_MTD_PARTITIONS   
  6. dep_tristate ' CFI Flash device mapped on Lubbock board' CONFIG_MTD_LUBBOCK $CONFIG_MTD_CFI $CONFIG_ARCH_LUBBOCK $CONFIG_MTD_PARTITIONS   
  7. dep_tristate ' CFI Flash device mapped on the FortuNet board' CONFIG_MTD_FORTUNET $CONFIG_MTD_CFI $CONFIG_ARCH_FORTUNET $CONFIG_MTD_PARTITIONS   
  8. dep_tristate ' CFI Flash device mapped on Epxa10db' CONFIG_MTD_EPXA10DB $CONFIG_MTD_CFI $CONFIG_MTD_PARTITIONS $CONFIG_ARCH_CAMELOT   
  9. dep_tristate ' CFI Flash device mapped on PXA CerfBoard' CONFIG_MTD_PXA_CERF $CONFIG_MTD_CFI $CONFIG_ARCH_PXA_CERF $CONFIG_MTD_PARTITIONS   
  10. dep_tristate ' NV-RAM mapping AUTCPU12 board' CONFIG_MTD_AUTCPU12 $CONFIG_ARCH_AUTCPU12   
  11. #wpq add S3C2410 的CFI配置   
  12. dep_tristate ' CFI Flash device mapped on S3C2410' CONFIG_MTD_S3C2410 $CONFIG_MTD_CFI   
  13. fi   

5. 修改Makefile文件
在HHARM2410-R3/kernel/drivers/mtd/maps/ Makefile文件中加入如下语句(当然要根据你的实际情况写啊?!):
#wpq add
obj-$(CONFIG_MTD_S3C2410) += s3c2410_wpq.o

 
相关文章:
s3c2410 Timer工作原理[图]
虚拟SPI时序在TC77与S3C2410通信中的应用[图]
s3c2410 MMU(存储器管理单元)讲解[图]
s3c2410 CACHES,WRITE BUFFER讲解[图]
S3C2410中的脉宽调制定时器(PWM)
S3C2410 中断程序的实现
s3c2410 watchdog详解
s3c2410 中断异常处理[图]
基于ARM9芯片S3C2410a的GPRS数据终端设计
ARM系统中DMA方式在数据采集中的应用[图]
AD7888与S3C2410的SPI接口及Linux下嵌入式驱动的实现[图]
基于s3c2410的ARMer9开发平台的使用
ARM S3C2410硬件手册重点
基于ARM S3C2410与TMS320C6416的接口设计[图]
ARM S3C2410驱动TFT-LCD的研究[图]
MINIGUI在S3C2410开发板的移植
mplayer在S3C2410上的移植
在S3C2410上移植yaffs2文件系统
S3C2410 bootloader(vivi)阅读笔记
s3c2410 LCD图片显示
S3C2410 LCD 驱动程序移植及GUI程序编写[图]
S3C2410X开发总结及心得
U-Boot在S3C2410开发板上的移植
S3C2410初始化
S3C2410通过IIS总线与音频芯片UDA1380进行通信
在S3C2410上移植bluetooth(蓝牙)
S3c2410软件调试总结
S3C2410上触摸屏的应用实例
S3c2410的触摸屏及模数转换
S3C2410的快速启动技术
基于嵌入式linux和s3c2410平台的视频采集
S3c2410 LCD驱动学习心得
s3c2410移植MPlayer到linux2.6

12 下一页
 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4