找回密码
 注册
关于网站域名变更的通知
查看: 190|回复: 1
打印 上一主题 下一主题

S3C2440 Linux驱动移植——SD卡驱动

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-6-2 15:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
开发板:TQ24402 A( h( J4 @, w4 }) \
0 Z1 R: I0 f0 X# Y
内核:Linux 2.6.32
" j6 \1 w" s3 }6 X6 d- Y6 K
+ |# r7 J. j7 `7 j( s4 Q6 ]1 V9 E" qPC OS:Ubuntu 11.04
5 H+ p! h7 r( Y- E+ u5 n. G# N8 P  c0 P7 D( R

) V! V! q! ^' v+ v3 I1 A1 w
, ]7 M2 c3 B( I9 f- c本文将对SD卡驱动的移植做简要介绍。8 Y" R( K% e6 H. @" F3 s- N" s/ |
: S% Z9 w; p: c1 p0 Y% ?
' y5 ?: A0 x: G' I, ]
1.  添加板级信息7 ~2 _: [5 n8 J9 F: e6 b; m
0 U; J5 {8 o) A) q
打开arch/ARM/mach-s3c2440/mach-smdk2440.c。
; t- N, g& H3 K% M( S8 p: H% ?- q9 X( ^7 ^5 V. o
添加如下结构体:' T4 [2 v; \) n) s# V* k! a

8 ]3 v4 m7 F- q  N- m* [/* Added by Yan Jun for SD/MMC driver */( ]+ U7 G* J0 m! q& m! N" |
/*********************************************/1 d$ f  }$ e6 x% Y
#include <plat/mci.h>
! ?6 @4 o7 E% g# \6 Astatic struct s3c24xx_mci_pdata s3c_mci_data = {( ~4 y& P; o, i: s* B
    .no_detect         = 0,8 j; J- d/ m9 ~/ |% P- E3 l
    .gpio_detect     = S3C2410_GPG(8),
6 t9 }. }9 j; M5 O& B    .no_wprotect     = 0,9 ^; t; |- _3 V8 G3 O  Y% Y
    .gpio_wprotect     = S3C2410_GPH(8),# S' I9 V) {# {  {4 ?1 h9 C
};, W/ o+ Q- Z/ j; z- d0 X$ B. j

2 K; {, Y0 D$ M# Q8 C! ?* k" ^. Bno_detect表示使用探测,也就是使用1个中断管脚来检测SD卡是否插入。
2 f" t# U6 h- j% tno_wprotect表示使用写保护。& {& j9 g: Y5 v. a. u( p, [* U# U
( l1 \7 T& |4 g/ u$ m# W
gpio_detect和gpio_wprotect是根据原理图上的gpio来填写的,请参考你的原理图。8 c2 }( }# F& T% S

5 V+ C) ?: Q( [3 J( `( D3 l8 {5 D7 V8 D0 W

, x. x2 J" B% |添加如下函数:0 O4 Z' j2 g7 v, Q1 Q; k, c5 Y
! n% T  T9 G( Z' l* s3 }
#if defined (CONFIG_MMC_S3C)
+ r& r0 K3 j- N2 D% h/ nvoid __init s3c_add_device_sdi(struct s3c24xx_mci_pdata *pdata) 6 v# S4 \2 A7 c7 q
{- J) U0 b, q1 I+ u6 U0 K
        s3c_device_sdi.dev.platform_data = pdata;
6 ]' q" P. q1 v& }/ C7 V# s        //if(!pdata && !pdata->no_detect)
4 |4 {* t3 P8 i. d( t+ @+ A        //        s3c2410_gpio_cfgpin(S3C2410_GPG(8), S3C2410_GPG8_EINT16);
. S% I+ A" [8 c& B+ D9 M- j: u- ]        platform_device_register(&s3c_device_sdi);3 C2 a* |* p5 ]; M6 @! W0 ^
}
* E, L# n& C' U9 E#else
4 R) O4 q0 E- M% v% m) j8 ]6 rvoid __init s3c_add_device_sdi(struct s3c24xx_mci_pdata *pdata) {}
2 U+ a% ]5 m/ G/ N+ r9 H% k5 B& I#endif+ Z7 D3 D7 J' a8 q
% U- Z4 U* r2 B  J% o8 a# u  {
在smdk2440_machine_init函数最后增加:
( ~0 ^, x; L- z9 j6 a# |" p3 d) Os3c_add_device_sdi(&s3c_mci_data);                        /* Added by Yan Jun for SD/MMC driver */
2 N) }6 D; H: @& J2 a
; M% M* _7 n$ A+ H5 l0 ]3 u. |8 K  K) e+ S, C$ ]! z
2. 配置内核! [8 ]3 h4 O# l7 Z9 g
0 h# X5 J7 G& e; d6 r: i
" O0 G9 I+ l; U7 n- M
( z# h* W' Z- h3 {
: @! H5 @! o9 j* C1 f( T

" a* @9 H4 P* K* h" [* E1 G8 Q3. 编译内核并烧入: i  J) E0 L# N/ a! ?4 o( x" K* k

" o- I3 d! s6 T; M6 X% y4. 修改/etc/mdev.config5 @$ w7 e0 A) n- W; i, U  N
修改该文件的目的是为了让sd卡可以自动挂载。
+ V3 h" E& Q1 s' _0 z
1 s$ H2 H9 Q' C* v内容如下:7 W% Z+ {. _& c- i8 {8 p
, u& V! }2 D0 b; t/ y/ d; {
mmcblk[0-9]*p[0-9] 0:0 0660 @/etc/sdcard_insert.sh
+ ?: c; G& `9 }) Y' d% dmmcblk[0-9]* 0:0 0660 $/etc/sdcard_remove.sh
1 f/ F. v, x7 d0 |8 S. E( J1 x" O, s- _2 A
这里调用了两个脚本,脚本如下。
& i7 m( n: m% ?( ]: y4 A& G* R6 Q. `
' |4 m1 l, s* o) Y[root@yj423 yj423]#cat /etc/sdcard_insert.sh
9 t( A3 t/ M7 P) u; {+ @#!/bin/sh  _3 G% D- c" M
echo "SD card insert action detected" > /dev/console1 w7 D. s. F5 z  c: O7 O
echo "MDEV = $MDEV"  > /dev/console, H7 K! t4 t) @$ X1 Y
mount -t vfat -o iocharset=cp936 /dev/$MDEV /mnt/sdcard! g, _  _2 W* L- A4 @0 h% A* T
+ n& j' L9 q  |5 Z8 G* Y1 r* b, z

$ N  \# o& |9 |! B+ ]% y) `+ M& S! _- }* o! `
[root@yj423 yj423]#cat /etc/sdcard_remove.sh
2 b5 t2 y& u7 _. S% G/ X#!/bin/sh
" n1 ~: T# R8 Aecho "SD card remove action detected" > /dev/console
) |  `  s; A/ R% e9 U$ ]. gecho "MDEV = $MDEV"  > /dev/console3 d4 L" |  h! T* u
sleep 1: d# E+ q3 g/ j/ ?0 I/ v' C
umount -fl /mnt/sdcard! h/ c7 ?& P: _$ t  V. M" F! _/ P
" Y; |  s7 Q5 ]- T; X
最后,创建目录/mnt/scard 即可。( @- ]/ H+ c2 e4 g- V: A

0 j( a# D( q+ S. {SD卡插入后,会自动挂在至/mnt/sdcard。* f5 {2 p* K: k* d' ~& C* s' Q4 p% D

4 W- C1 F: H& r1 Y7 m4 E. e2 k. M
# x* {6 L, g- `. O- F5. 验证+ `/ h: R" {- c4 F: H; s, N0 l
首先看下设备文件:" d" E0 s& ]9 Q0 D
( l$ g7 ^1 J; o, c
[root@yj423 yj423]#ls /dev/mmcblk0*1 ?' x0 w6 u4 R; m. [
/dev/mmcblk0    /dev/mmcblk0p1
0 v  y" v4 A' q% n8 i, S9 ~) D8 Q  n

8 e' V) l5 Q+ Y3 X
/ m4 N6 Q) C0 l- A+ Y$ K$ C接着看下挂载情况:[root@yj423 yj423]#mount8 Q1 n4 M# Y, \
rootfs on / type rootfs (rw)
" T1 k; {. L; U3 Y/dev/root on / type yaffs2 (rw,relatime)
; M# t) K; u  e- Rproc on /proc type proc (rw,relatime)3 y5 u; r) E$ r$ S' V
tmpfs on /tmp type tmpfs (rw,relatime)4 u) T. k. x7 i0 s$ \# |
sysfs on /sys type sysfs (rw,relatime)
+ F  o! {6 J1 q: a3 J3 N" }9 Stmpfs on /dev type tmpfs (rw,relatime)
8 g# I1 o7 K& k5 a# Ydevpts on /dev/pts type devpts (rw,relatime,mode=600)  G* c) ^4 ?+ e% ]8 g
/dev/mmcblk0p1 on /mnt/sdcard type vfat (rw,relatime,fmask=0000,dmask=0000,allow_utime=0022,codepage=cp437,iocharset=cp936,shortname=mixed,errors=remount-ro)
) t0 p4 _- e( T% X4 ^
: w, @* X1 W! A3 M. l最后两行显示了设备mmcblk0p1挂在到了/mnt/sdcard。( q- G; C( r& j9 ^3 X. c, B- O) z' o2 r! K
) S: j1 V! T0 c

3 L3 O( u  `0 A& L  N% S: U9 F! O3 j% b. a, V* {
最后,去/mnt/sdcard下看看。& Q' v( Q7 a; G) E$ G8 O7 |
3 y( {% u2 d; l/ B' h1 v- M
[root@yj423 yj423]#ls /mnt/sdcard/" V2 @+ w. t4 k! `0 d! B: K
DCIM  mp3
, D) b$ N$ I. b1 d+ ]
8 x, f) ~; b4 s- g% ^1 g- V8 z  m/ U8 g' h* ]. P" ?
% m2 [! e) [1 S. H7 `
NOTE: 如果先插入SD卡,再启动系统,系统将无法正常启动,表现为无法进入控制台。原因待查。
7 W6 ~0 C1 {' a3 q
) U7 n" }- O) S/ G7 W8 p5 D5 t: p# Z( H4 O( @' C! ?. a% F
5 b& v+ d7 F( t5 F4 m& {. l" {
! K1 \" }1 K  `- M9 y
2 a7 t' j6 x, i1 c5 ^% c/ @

+ ~: L) i* L4 Y* Z" W
, |1 [) ~. t' f% [1 J3 B
" q6 m. w' u# V, N: [
( }! P: {7 n1 p. j" k% \8 z4 g1 J3 v
3 r# }  p' S( }. h  ?
1 E  m6 I% G1 [4 f5 U# O

该用户从未签到

2#
发表于 2020-6-2 16:00 | 只看该作者
S3C2440 Linux驱动移植——SD卡驱动
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-30 08:08 , Processed in 0.078125 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表