作者信息

作者: 彭东林

邮箱:pengdonglin137@163.com

QQ:405728433

平台简介

开发板:tiny4412ADK + S700 + 4GB Flash

要移植的内核版本:Linux-4.4.0 (支持device tree)

u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动)

busybox版本:busybox 1.25

eMMC:KLMxGxFE3x-x00x

交叉编译工具链: arm-none-linux-gnueabi-gcc

(gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29))

概述

eMMC驱动在内核中也已经支持好了,代码在:drivers/mmc/host/dw_mmc-exynos.c,我们要做的就是修改设备树配置文件。

移植

一、原理图

eMMC这部分电路都在核心板上:

从上图看到,tiny4412上exynos4412与eMMC传输数据的总线宽度是8位,使用的控制器是Mobile Storage Host,占用了SDMMC0和SDMMC1的资源,即SDMMC0和SDMMC1的引脚被复用为SD_4功能。具体信息请参考Exynos4412的用户手册的 第23节Mobile Storage Host:

二、修改设备树

这部分我参考了arch/arm/boot/dts/exynos4412-trats2.dts,对arch/arm/boot/dts/exynos4412-tiny4412.dts做了如下修改:

diff --git a/arch/arm/boot/dts/exynos4412-tiny4412.dts b/arch/arm/boot/dts/exynos4412-tiny4412.dts

index bd823eb..585cab7 100644

--- a/arch/arm/boot/dts/exynos4412-tiny4412.dts

+++ b/arch/arm/boot/dts/exynos4412-tiny4412.dts

@@ -106,6 +106,23 @@

     status = "okay";

 };

 

+&mshc_0 {

+    num-slots = <1>;

+    broken-cd;

+    non-removable;

+    card-detect-delay = <200>;

+    vmmc-supply = <&mmc_reg>;

+    clock-frequency = <400000000>;

+    samsung,dw-mshc-ciu-div = <0>;

+    samsung,dw-mshc-sdr-timing = <2 3>;

+    samsung,dw-mshc-ddr-timing = <1 2>;

+    pinctrl-0 = <&sd4_clk &sd4_cmd &sd4_bus4 &sd4_bus8>;

+    pinctrl-names = "default";

+    status = "okay";

+    bus-width = <8>;

+    cap-mmc-highspeed;

+};

+

 &serial_0 {

     status = "okay";

 };

实际测试时发现不设置vmmc-supply也可以正常工作,上面的这些参数我直接从arch/arm/boot/dts/exynos4412-trats2.dts拷贝过来的,没有做任何改动,其中mshc0是在arch/arm/boot/dts/exynos4x12.dtsi定义的:

mshc_0: mmc@12550000 {

    compatible = "samsung,exynos4412-dw-mshc";

    reg = <0x12550000 0x1000>;

    interrupts = <0 77 0>;

    #address-cells = <1>;

    #size-cells = <0>;

    fifo-depth = <0x80>;

    clocks = <&clock CLK_SDMMC4>, <&clock CLK_SCLK_MMC4>;

    clock-names = "biu", "ciu";

    status = "disabled";

};

三、测试

下面是启动log:

   1: [    2.286502] dwmmc_exynos 12550000.mmc: IDMAC supports 32-bit address mode.

   2: [    2.286613] dwmmc_exynos 12550000.mmc: Using internal DMA controller.

   3: [    2.289979] dwmmc_exynos 12550000.mmc: Version ID is 240a

   4: [    2.295396] dwmmc_exynos 12550000.mmc: DW MMC controller at irq 89,32 bit host data width,128 deep fifo

   5: [    2.304812] dwmmc_exynos 12550000.mmc: No vqmmc regulator found

   6: [    2.340643] dwmmc_exynos 12550000.mmc: 1 slots initialized

   7: [    2.341935] usbcore: registered new interface driver usbhid

   8: [    2.341991] usbhid: USB HID core driver

   9: [    2.344435] NET: Registered protocol family 10

  10: [    2.345015] sit: IPv6 over IPv4 tunneling driver

  11: [    2.345497] NET: Registered protocol family 17

  12: [    2.346734] NET: Registered protocol family 15

  13: [    2.351355] Registering SWP/SWPB emulation handler

  14: [    2.357490] hctosys: unable to open rtc device (rtc0)

  15: [    2.365652] usb 2-2: new high-speed USB device number 2 using exynos-ehci

  16: [    2.380409] ALSA device list:

  17: [    2.380451]   No soundcards found.

  18: [    2.381460] RAMDISK: gzip image found at block 0

  19: [    2.383346] mmc1: MAN_BKOPS_EN bit is not set

  20: [    2.384095] mmc_host mmc1: Bus speed (slot 0) = 50000000Hz (slot req 52000000Hz, actual 50000000HZ div = 0)

  21: [    2.392918] mmc_host mmc1: Bus speed (slot 0) = 100000000Hz (slot req 52000000Hz, actual 50000000HZ div = 1)

  22: [    2.402558] mmc1: new DDR MMC card at address 0001

  23: [    2.407922] mmcblk0: mmc1:0001 M4G1YC 3.64 GiB 

  24: [    2.412049] mmcblk0boot0: mmc1:0001 M4G1YC partition 1 2.00 MiB

  25: [    2.417930] mmcblk0boot1: mmc1:0001 M4G1YC partition 2 2.00 MiB

  26: [    2.424030] mmcblk0rpmb: mmc1:0001 M4G1YC partition 3 128 KiB

  27: [    2.430169]  mmcblk0: p1 p2 p3 p4

查看一下:

   1: [root@tiny4412 ]# ls /dev/mmcblk* -l

   2: brw-rw----    1 0        0         179,   0 Jan  1 00:00 /dev/mmcblk0

   3: brw-rw----    1 0        0         179,  16 Jan  1 00:00 /dev/mmcblk0boot0

   4: brw-rw----    1 0        0         179,  32 Jan  1 00:00 /dev/mmcblk0boot1

   5: brw-rw----    1 0        0         179,   1 Jan  1 00:00 /dev/mmcblk0p1

   6: brw-rw----    1 0        0         179,   2 Jan  1 00:00 /dev/mmcblk0p2

   7: brw-rw----    1 0        0         179,   3 Jan  1 00:00 /dev/mmcblk0p3

   8: brw-rw----    1 0        0         179,   4 Jan  1 00:00 /dev/mmcblk0p4

   9: brw-rw----    1 0        0         179,  48 Jan  1 00:00 /dev/mmcblk0rpmb

  10: brw-rw----    1 0        0         179,  64 Jan  1 00:00 /dev/mmcblk1

  11: brw-rw----    1 0        0         179,  65 Jan  1 00:00 /dev/mmcblk1p1

其中mmcblk1是我们的sdcard,mmcblk0是核心板上的eMMC。 我在eMMC中烧写的是Android系统,可以看到Android系统有7个分区,下面我们挂载一个分区看看:

   1: [root@tiny4412 ]# mount -t ext4 /dev/mmcblk0p2 /mnt

   2: [  287.710063] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)

   3: [root@tiny4412 ]# ls /mnt/

   4: addon.d     build.prop  fonts       lost+found  tts         xbin

   5: app         busybox     framework   media       usr

   6: bin         etc         lib         priv-app    vendor

代码我已经上传到了github上:

git clone https://github.com/pengdonglin137/linux-4.4_tiny4412.git -b port_to_tiny4412

基于tiny4412的Linux内核移植 -- eMMC驱动移植(六)的更多相关文章

  1. 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  2. 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  3. 基于tiny4412的Linux内核移植(支持device tree)(一)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  4. 基于tiny4412的Linux内核移植 -- 设备树的展开

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  5. 基于tiny4412的Linux内核移植 -- 设备树的展开【转】

    转自:https://www.cnblogs.com/pengdonglin137/p/5248114.html#_lab2_3_1 阅读目录(Content) 作者信息 平台简介 摘要 正文 一.根 ...

  6. 基于tiny4412的Linux内核移植 -- PWM子系统学习(八)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  7. 基于tiny4412的Linux内核移植(支持device tree)(三)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  8. 基于tiny4412的Linux内核移植 --- aliases节点解析

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  9. 基于tiny4412的Linux内核移植 --- aliases节点解析【转】

    转自:https://www.cnblogs.com/pengdonglin137/p/5252348.html 阅读目录(Content) 作者信息 平台简介 正文 回到顶部(go to top) ...

随机推荐

  1. nginx源码分析--使用GDB调试(strace、 pstack )

    nginx源码分析--使用GDB调试(strace.  pstack ) http://blog.csdn.net/scdxmoe/article/details/49070577

  2. iOS APP程序启动原理

    UIApplication 程序启动原理 一个应用程序运行就必须要有一个进程,一个进程至少要有一个线程,我们把这个线程叫做主线程,主线程开启之后会开启一个主运行循环,如果不开启一个运行循环,程序开启了 ...

  3. jdk1.8在linux环境下的安装

    转自博客:http://www.cnblogs.com/ShawnYuki/p/6816179.html

  4. java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast

    严重: Exception starting filter encodingFilterjava.lang.ClassCastException: org.springframework.web.fi ...

  5. java实现数据库分页

    /*** * 工具类 * @param pageIndex //页码 * @param pageSize//每页数据的条数 * @param rowCount//总的数据条数 * @return */ ...

  6. Django-分頁組件

    一.仿django分页功能自己实现 urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from django.contrib imp ...

  7. phoenix到hbase的应用

    一.phoenix的简介 hbase的java api或者其语法很难用,可以认为phoenix是一个中间件,提供了访问hbase的另外的语法. 二.配置phoenix和hbase 1.下载 phoen ...

  8. python import模块的搜索路径

    当在py代码中import所依赖的模块时, python是从哪里找到这些模块呢,即模块的搜索路径是啥? 默认情况下,Python解释器会搜索当前目录.所有已安装的内置模块和第三方模块,搜索路径存放在s ...

  9. CentOS7.5字体美化

    背景知识 有衬线 (Serif) 无衬线 (Sans Serif) 和等宽 (Monospace) 字型 1 有衬线 (Serif) 字型是比较正式的字体,比划粗细不一,在笔划的边缘有装饰部分(我的理 ...

  10. 使用jsonp形式跨域访问实现电商平台的左侧导航栏

    电商平台有个具备的左侧商品类目的导航栏的结构. 通过jsonp跨域访问电商平台的后台管理系统商品分类.(主要实现后台Java代码) 实现基本步骤: 1.在后台管理系统中准备相应的json数据. poj ...