Linux上SD/MMC卡驱动移植调试记录

本文介绍了解决Linux 2.6.28内核中SD卡驱动初始化失败的问题,通过在驱动代码中增加10毫秒的延迟解决了512MB SD卡无法被正确识别的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的内核是Linux 2.6.28,已经带有了sd mmc卡驱动了只要在menuconfig里面把相应选项选上即可,
编译出来了之后,我插上了我的一个512mb的卡,在启动信息了打印如下:

s3c2440-sdi s3c2440-sdi: powered down.
mmc0: error -110 whilst initialising SD card
s3c2440-sdi s3c2440-sdi: powered down.
注意红色部分,进入了之后/dev/devices 里面看不到没有相应的驱动。驱动工作不正常!
但是插上了一个32mb的卡后,就能够正常识别。
在网上查到如下信息:
mmc0: error -110 whilst initialising SD card 
應該是卡在 linux/driver/mmc/core/sd.c 的 
mmc_sd_init_card() --> mmc_send_app_op_cond(host, ocr, NULL) 

ocr 是指 card 內部的 Operation Condition Register (OCR) 讀出來的值 
發送 CMD41 CMD55 讀取 OCR 的值 
問題是出在 OCR[31] 一直是 0 <--- 初始化沒有完成?? 
結果問題是出在電壓不足,要把 sd power enable
上面这位说的解决方法我也不太清楚,不过他指出的错误地方是正确的,就是在那里出错的。
现在说下这个错误的解决方案:
driver/mmc/core/sd.c 的mmc_sd_init_card()函數中mmc_read_switch前延時10ms

mdelay(10);

err = mmc_read_switch(card);
看到红色语句了么,就这个加上去就可以了啊,哈哈......
加上红色延时语句之后启动信息如下
s3c2440-sdi s3c2440-sdi: running at 196kHz (requested: 195kHz).
s3c2440-sdi s3c2440-sdi: running at 25000kHz (requested: 25000kHz).
s3c2440-sdi s3c2440-sdi: running at 25000kHz (requested: 25000kHz).
mmc0: new SD card at address 95b9
mmcblk0: mmc0:95b9 SD02G 1.83 GiB
mmcblk0: p1

驱动工作完全正常。

进入系统后

mount /dev/mmcblk0p1 /mnt


### Unity 内置渲染管线与 URP (Universal Render Pipeline) 的区别 #### 渲染架构差异 Unity 内置渲染管线采用较为传统的单通道或多通道延迟渲染方式,其灵活性较低。相比之下,URP 是基于 Scriptable Render Pipeline(SRP),允许开发者自定义渲染流程中的各个阶段[^1]。 #### 性能优化特性 对于移动设备和其他资源受限平台而言,URP 提供了更高效的性能表现。这是因为 URP 支持更低级别的硬件访问控制以及更好的批处理能力,从而减少了绘制调用次数并提高了帧率稳定性[^4]。 #### Shader 和材质支持 在内置渲染管线中使用的着色器主要依赖于 Surface Shaders 或者 Handwritten Vertex/Pixel Shaders 。然而,在 URP 下则完全迁移到 HLSL 并引入了新的 Material Properties ,这不仅简化了开发过程还增强了跨平台兼容性。 #### 特殊效果实现 当涉及到复杂视觉特效如屏幕空间环境光遮蔽(Ambient Occlusion)时,两者都提供了相应的解决方案。但在具体实现上有所区别;例如,在 URP 中可以通过编写自定义 Passes 来增强此类功能的效果质量[^3]。 ```csharp // 示例:如何在一个简单的 URP shader 中添加 AO 效果 Shader "Custom/AOExample" { SubShader { Tags { "RenderType"="Opaque" } Pass { Name "AO" HLSLPROGRAM #pragma vertex vert #pragma fragment frag struct Attributes { float4 positionOS : POSITION; float2 uv : TEXCOORD0; }; struct Varyings { float4 posHCS : SV_POSITION; float2 uv : TEXCOORD0; }; sampler2D _MainTex; Varyings vert(Attributes input) { Varyings output; output.posHCS = TransformObjectToHClip(input.positionOS); output.uv = input.uv; return output; } half4 frag(Varyings input) : SV_Target { // 假设我们已经有了一个可以获取 SSAO 数据的方法 GetScreenSpaceAmbientOcclusion() half aoValue = GetScreenSpaceAmbientOcclusion(input.uv); // 应用 AO 到最终颜色输出 half4 color = tex2D(_MainTex, input.uv); color.rgb *= lerp(1.0, aoValue, 0.75); return color; } ENDHLSL } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值