说明:对于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目录下,然后
- 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设备了,如下:
- ...
-
&s3c_device_i2c,
-
&s3c_device_iis,
-
&s3c_device_ts,
-
&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。设定:
- static struct s3c24xx_mci_pdata s3cmci_def_pdata = {
-
.do_dma = 0,
-
.gpio_detect = S3C2410_GPG10, //修改此处
-
.set_power = NULL,
-
.ocr_avail = MMC_VDD_32_33,
-
};
3编译需要注意的是,make menuconfig的时候,尽量把MMC/SD Card Support下的选项全选上,不然在/dev目录下不会看到设备信息。
我的config如下:
- Device Drivers -->
-
<*>MMC/SD card support
-
-----MMC/SD card support
-
[ ] MMC debugging
-
[ ] Allow unsafe resume (DANGEROUS)
-
*** MMC/SD Card Drivers ***
-
<*> MMC block device driver
-
[*] Use bounce buffer for simple hosts
-
< > SDIO UART/GPS class support
-
*** MMC/SD Host Controller Drivers ***
-
< > MMC/SD over SPI (EXPERIMENTAL)
-
<*> Samsung S3C24xx SD/MMC Card Interface support
选择语言CP437,ISO 8859-1,最好也同时选择SCSI相关的东西吧,连USB也一块支持了。特别是语言项,如果选的不对容易出错!可以参看移植USB的章节!Make menuconfig,将内核中关于MMC/SD的选项都选上,最后make zImage。
4测试MMC/SD设备通常的驱动还不支持热插拔,因此在内核启动前先将sd卡插上。移植成功后,在启动信息中会显示:
- mmc0: new SD card at address 8fe4
-
mmcblk0: mmc0:8fe4 SD02G 1.84 GiB
-
mmcblk0:
-
eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1
如果使用的SD卡是没有被格式化的,就会出现如下信息:
- mmc0: new SD card at address 8fe4
-
mmcblk0: mmc0:8fe4 SD02G 1.84 GiB
-
mmcblk0: unknown partition table
-
eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1
可以通过用读卡器将SD卡格式化成FAT32格式的,然后对其进行分区,不分区也可以,默认为只有一个区。
移植成功后,挂载一个文件系统,在文件系统下挂载SD卡
- mount -t vfat /dev/mmcblk0p1 /mnt
若挂载成功,就可以在/mnt下看到SD卡的内容
查看分区信息
- major minor #blocks name
-
-
31 0 384 mtdblock0
-
31 1 2048 mtdblock1
-
31 2 63040 mtdblock2
-
179 0 62080 mmcblk0
-
179 1 62060 mmcblk0p1
我的启动信息如下:
- s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled
-
mapped channel 2 to 0
-
s3c2410-sdi s3c2410-sdi: powered down.
-
s3c2410-sdi s3c2410-sdi: initialisation done.
-
mapped channel 10 to 2
-
mapped channel 9 to 1
-
UDA1341 audio driver initialized
-
TCP cubic registered
-
NET: Registered protocol family 1
-
RPC: Registered udp transport module.
-
RPC: Registered tcp transport module.
-
s3c2410-rtc s3c2410-rtc: hctosys: invalid date/time
-
IP-Config: Complete:
-
device=eth0, addr=192.168.1.68, mask=255.255.255.0, gw=192.168.1.1,
-
host=www, domain=, nis-domain=richardnee.com,
-
bootserver=192.168.1.66, rootserver=192.168.1.66, rootpath=
-
Looking up port of RPC 100003/2 on 192.168.1.66
-
Looking up port of RPC 100005/1 on 192.168.1.66
-
VFS: Mounted root (nfs filesystem).
-
Freeing init memory: 144K
-
s3c2410-sdi s3c2410-sdi: running at 0kHz (requested: 0kHz).
-
s3c2410-sdi s3c2410-sdi: running at 99kHz (requested: 99kHz).
-
s3c2410-sdi s3c2410-sdi: running at 99kHz (requested: 99kHz).
-
s3c2410-sdi s3c2410-sdi: running at 99kHz (requested: 99kHz).
-
s3c2410-sdi s3c2410-sdi: running at 99kHz (requested: 99kHz).
-
s3c2410-sdi s3c2410-sdi: running at 99kHz (requested: 99kHz).
-
s3c2410-sdi s3c2410-sdi: running at 99kHz (requested: 99kHz).
-
s3c2410-sdi s3c2410-sdi: running at 99kHz (requested: 99kHz).
-
s3c2410-sdi s3c2410-sdi: running at 12675kHz (requested: 20000kHz).
-
s3c2410-sdi s3c2410-sdi: running at 12675kHz (requested: 20000kHz).
-
mmc0: new MMC card at address 0001
-
mmcblk0: mmc0:0001 MMC 967680KiB
-
mmcblk0: p1
Ok!移植成功~
今天刚移植好,先把sd/mmc的驱动移植部分贴上来,其他的内核移植部分一点点的贴~
参考文献:
好久了,忘记~
阅读(2107) | 评论(0) | 转发(0) |