当前位置:   article > 正文

设备树之emmc驱动移植_emmc移植

emmc移植

硬件设备:itop4412开发板 内核版本linux-3.8.1

设备树方式减少了设备的冗余编码,同时使移植变得更加高效。eMMC作为开发板的基础,十分重要。

设备树用的是内核自带的smdk4412.dts

vim arch/arm/boot/dts/exynos4412-smdk4412.dts

在设备树中添加如下代码:

  1. 87 ldo22_reg: LDO22 {
  2. 88 regulator-name = "VMEM_VDD_2.8V";
  3. 89 regulator-min-microvolt = <2800000>;
  4. 90 regulator-max-microvolt = <2800000>;
  5. 91 maxim,ena-gpios = <&gpk0 2 1>;
  6. 92 };
  1. 146 mmc@12550000 {
  2. 147 compatible = "samsung,exynos4412-dw-mshc";
  3. 148 reg = <0x12550000 0x1000>;
  4. 149 interrupts = <0 77 0>;
  5. 150 #address-cells = <1>;
  6. 151 #size-cells = <0>;
  7. 152 fifo-depth = <0x80>;
  8. 153 clocks = <&clock 301>, <&clock 149>;
  9. 154 clock-names = "biu", "ciu";
  10. 155 num-slots = <1>;
  11. 156 broken-cd;
  12. 157 non-removable;
  13. 158 card-detect-delay = <200>;
  14. 159 vmmc-supply = <&ldo22_reg>;
  15. 160 clock-frequency = <400000000>;
  16. 161 samsung,dw-mshc-ciu-div = <0>;
  17. 162 samsung,dw-mshc-sdr-timing = <2 3>;
  18. 163 samsung,dw-mshc-ddr-timing = <1 2>;
  19. 164 pinctrl-0 = <&sd4_clk &sd4_cmd &sd4_bus4 &sd4_bus8>;
  20. 165 pinctrl-names = "default";
  21. 166 status = "okay";
  22. 167 bus-width = <8>;
  23. 168 cap-mmc-highspeed;
  24. 169 };


在驱动中增加设备属性匹配:

vim drivers/mmc/host/dw_mmc-exynos.c

  1. 221 static const struct of_device_id dw_mci_exynos_match[] = {
  2. 222 { .compatible = "samsung,exynos4412-dw-mshc",},
  3. 223 { .compatible = "samsung,exynos5250-dw-mshc",
  4. 224 .data = &exynos5250_drv_data, },
  5. 225 {},
  6. 226 };

make menuconfig 配置emmc内核驱动

编译烧写进开发板后启动会出现错误:

mmc1: unrecognised EXT_CSD revision 7 

解决方法:将296行的6改为7

vim drivers/mmc/core/mmc.c

  1. 295 /* amended by cqx:6->7 */
  2. 296 if (card->ext_csd.rev > 7) {
  3. 297 pr_err("%s: unrecognised EXT_CSD revision %d\n",
  4. 298 mmc_hostname(card->host), card->ext_csd.rev);
  5. 299 err = -EINVAL;
  6. 300 goto out;
  7. 301 }

重新编译后烧写入开发板,启动打印如下信息说明emmc驱动移植成功。

  1. mmcblk0: mmc1:0001 4YMD3R 3.64 GiB
  2. mmcblk0boot0: mmc1:0001 4YMD3R partition 1 4.00 MiB
  3. mmcblk0boot1: mmc1:0001 4YMD3R partition 2 4.00 MiB
  4. mmcblk0: p1 p2 p3 p4
  5. mmcblk0boot1: unknown partition table
  6. mmcblk0boot0: unknown partition table
  7. mmc0: mmc_rescan_try_freq: trying to init card at 1562500 Hz
  8. mmc0: new high speed SD card at address 0260
  9. 使用fdisk -l命令查看详细信息
  10. Disk /dev/mmcblk0: 3909 MB, 3909091328 bytes
  11. 226 heads, 33 sectors/track, 1023 cylinders
  12. Units = cylinders of 7458 * 512 = 3818496 bytes
  13. Device Boot Start End Blocks Id System
  14. /dev/mmcblk0p1 653 1020 1372272 c Win95 FAT32 (LBA)
  15. /dev/mmcblk0p2 6 287 1051578 83 Linux
  16. /dev/mmcblk0p3 288 569 1051578 83 Linux
  17. /dev/mmcblk0p4 570 652 309507 83 Linux
  18. Partition table entries are not in disk order
  19. Disk /dev/mmcblk0boot1: 4 MB, 4194304 bytes
  20. 4 heads, 16 sectors/track, 128 cylinders
  21. Units = cylinders of 64 * 512 = 32768 bytes
  22. Disk /dev/mmcblk0boot1 doesn't contain a valid partition table
  23. Disk /dev/mmcblk0boot0: 4 MB, 4194304 bytes
  24. 4 heads, 16 sectors/track, 128 cylinders
  25. Units = cylinders of 64 * 512 = 32768 bytes
  26. Disk /dev/mmcblk0boot0 doesn't contain a valid partition table
  27. Disk /dev/mmcblk1: 1992 MB, 1992294400 bytes
  28. 4 heads, 16 sectors/track, 60800 cylinders
  29. Units = cylinders of 64 * 512 = 32768 bytes

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/982604
推荐阅读
  

闽ICP备14008679号