Chinaunix首页 | 论坛 | 博客
  • 博客访问: 55168
  • 博文数量: 10
  • 博客积分: 365
  • 博客等级: 一等列兵
  • 技术积分: 125
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-07 16:28
文章存档

2012年(3)

2011年(7)

分类: 嵌入式

2012-01-16 11:05:49

说明:对于Linux在ARM上的移植,实际上我只能算是个实践者,基本没有多少是自己原创,但是凡事我贴上来的东西一般都是经过自己一步步实践的,并且对于自己参考的文章进一步整理精华,更进一步地添加自己的总结,以及在试验中遇到问题的解决。希望共同进步,Open Source, Open Mind!

 1添加mmc/sd补丁

在网上找到一个补丁,下下来就好用:
*checkout*/branches/src/target/kernel/2.6.24.x/patches/s3c_mci.patch?rev=4096
 s3c_mci.rar  
把该文件放到linux-2.6.24.4目录下,然后
  1. patch -p1 < s3c_mci.patch

    2修改相关源代码
patch完成以后,在arch/arm/mach-s3c2410/mach-smdk2410.c的smdk2410_devices[] 数组中加入&s3c_device_sdi,不然的话启动的时候看不到probe函数的内容,即内核不会加载对应的驱动。
给arch/arm/mach-s3c2410/mach-smdk2410.c的smdk2410_devices[] __initdata添加sdi设备了,如下:
  1. ...
  2.     &s3c_device_i2c,
  3.     &s3c_device_iis,
  4.     &s3c_device_ts,
  5.     &s3c_device_sdi, //加入这一行

然后,在driver/mmc/host/s3cmci.c中的s3cmci_def_pdata结构中的gpio_detect需要设置,我的板子上用的是EINT18,故应该是S3C2410_GPG10。到这里需要修改的地方基本上就没有了。
优龙nCD_SD:GPG10!很多其他开发板为GPG8!NOTE!
再把补丁添加的s3cmci.c还要加入detect脚位,我选择的是S3C2410_GPG10。设定:
  1. static struct s3c24xx_mci_pdata s3cmci_def_pdata = {
  2.            .do_dma = 0,
  3.            .gpio_detect = S3C2410_GPG10, //修改此处
  4.            .set_power = NULL,
  5.            .ocr_avail = MMC_VDD_32_33,
  6.     };


    3编译
需要注意的是,make menuconfig的时候,尽量把MMC/SD Card Support下的选项全选上,不然在/dev目录下不会看到设备信息。
我的config如下:
  1. Device Drivers -->
  2.          <*>MMC/SD card support
  3.     -----MMC/SD card support
  4.     [ ] MMC debugging
  5.     [ ] Allow unsafe resume (DANGEROUS)
  6.     *** MMC/SD Card Drivers ***
  7.     <*> MMC block device driver
  8.     [*] Use bounce buffer for simple hosts
  9.     < > SDIO UART/GPS class support
  10.     *** MMC/SD Host Controller Drivers ***
  11.     < > MMC/SD over SPI (EXPERIMENTAL)
  12.     <*> Samsung S3C24xx SD/MMC Card Interface support
选择语言CP437,ISO 8859-1,最好也同时选择SCSI相关的东西吧,连USB也一块支持了。特别是语言项,如果选的不对容易出错!可以参看移植USB的章节!

Make menuconfig,将内核中关于MMC/SD的选项都选上,最后make zImage。

    4测试MMC/SD设备
通常的驱动还不支持热插拔,因此在内核启动前先将sd卡插上。移植成功后,在启动信息中会显示:
  1. mmc0: new SD card at address 8fe4
  2.     mmcblk0: mmc0:8fe4 SD02G 1.84 GiB
  3.     mmcblk0:
  4.     eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1

如果使用的SD卡是没有被格式化的,就会出现如下信息:
  1. mmc0: new SD card at address 8fe4
  2. mmcblk0: mmc0:8fe4 SD02G 1.84 GiB
  3. mmcblk0: unknown partition table
  4. eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1

可以通过用读卡器将SD卡格式化成FAT32格式的,然后对其进行分区,不分区也可以,默认为只有一个区。
移植成功后,挂载一个文件系统,在文件系统下挂载SD卡
  1. mount -t vfat /dev/mmcblk0p1 /mnt
若挂载成功,就可以在/mnt下看到SD卡的内容
  1. cat /proc/partitions
查看分区信息
  1. major minor #blocks name

  2. 31 0 384 mtdblock0
  3. 31 1 2048 mtdblock1
  4. 31 2 63040 mtdblock2
  5. 179 0 62080 mmcblk0
  6. 179 1 62060 mmcblk0p1

我的启动信息如下:
  1. s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled
  2.     mapped channel 2 to 0
  3.     s3c2410-sdi s3c2410-sdi: powered down.
  4.     s3c2410-sdi s3c2410-sdi: initialisation done.
  5.     mapped channel 10 to 2
  6.     mapped channel 9 to 1
  7.     UDA1341 audio driver initialized
  8.     TCP cubic registered
  9.     NET: Registered protocol family 1
  10.     RPC: Registered udp transport module.
  11.     RPC: Registered tcp transport module.
  12.     s3c2410-rtc s3c2410-rtc: hctosys: invalid date/time
  13.     IP-Config: Complete:
  14.           device=eth0, addr=192.168.1.68, mask=255.255.255.0, gw=192.168.1.1,
  15.          host=www, domain=, nis-domain=richardnee.com,
  16.          bootserver=192.168.1.66, rootserver=192.168.1.66, rootpath=
  17.     Looking up port of RPC 100003/2 on 192.168.1.66
  18.     Looking up port of RPC 100005/1 on 192.168.1.66
  19.     VFS: Mounted root (nfs filesystem).
  20.     Freeing init memory: 144K
  21.     s3c2410-sdi s3c2410-sdi: running at 0kHz (requested: 0kHz).
  22.     s3c2410-sdi s3c2410-sdi: running at 99kHz (requested: 99kHz).
  23.     s3c2410-sdi s3c2410-sdi: running at 99kHz (requested: 99kHz).
  24.     s3c2410-sdi s3c2410-sdi: running at 99kHz (requested: 99kHz).
  25.     s3c2410-sdi s3c2410-sdi: running at 99kHz (requested: 99kHz).
  26.     s3c2410-sdi s3c2410-sdi: running at 99kHz (requested: 99kHz).
  27.     s3c2410-sdi s3c2410-sdi: running at 99kHz (requested: 99kHz).
  28.     s3c2410-sdi s3c2410-sdi: running at 99kHz (requested: 99kHz).
  29.     s3c2410-sdi s3c2410-sdi: running at 12675kHz (requested: 20000kHz).
  30.     s3c2410-sdi s3c2410-sdi: running at 12675kHz (requested: 20000kHz).
  31.     mmc0: new MMC card at address 0001
  32.     mmcblk0: mmc0:0001 MMC 967680KiB
  33.      mmcblk0: p1

Ok!移植成功~

今天刚移植好,先把sd/mmc的驱动移植部分贴上来,其他的内核移植部分一点点的贴~

参考文献:
好久了,忘记~
阅读(2107) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~