基于tiny4412的Linux内核移植 -- eMMC驱动移植(六)
作者信息
作者: 彭东林
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驱动移植(六)的更多相关文章
- 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植(支持device tree)(一)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- 设备树的展开
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- 设备树的展开【转】
转自:https://www.cnblogs.com/pengdonglin137/p/5248114.html#_lab2_3_1 阅读目录(Content) 作者信息 平台简介 摘要 正文 一.根 ...
- 基于tiny4412的Linux内核移植 -- PWM子系统学习(八)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植(支持device tree)(三)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 --- aliases节点解析
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 --- aliases节点解析【转】
转自:https://www.cnblogs.com/pengdonglin137/p/5252348.html 阅读目录(Content) 作者信息 平台简介 正文 回到顶部(go to top) ...
随机推荐
- 升级OS10.11系统后 Xcode6.4的变化少了个按钮 could not launch “Xcode” Xcode 插件安装
升级OS10.11系统后 Xcode6.4的变化少了个按钮 could not launch “Xcode” Xcode 插件安装 A: 升级10.11后Xcode 左上角模拟器选择菜单不在了 ...
- MySQL5.6.32源码安装
. 安装好--安装MySQL需要的包 yum install -y autoconf automake imake libxml2-devel expat-devel cmake gcc gcc- ...
- django “如何”系列8:如何为模型提供初始化数据
当你第一次配置一个app的时候,有时候使用硬编码的数据去预填充你的数据库是非常有用的.这里有几个你可以让django自动创建这些数据的方法:你可以提供固定格式的初始化数据或者提供通过SQL初始化数据. ...
- Django 定制验证码
一.图片验证码 方式一: def get_validCode_img(request): path=os.path.join(settings.BASE_DIR,'static','image','1 ...
- 《java并发编程实战》读书笔记5--任务执行, Executor框架
第6章 任务执行 6.1 在线程中执行任务 第一步要找出清晰的任务边界.大多数服务器应用程序都提供了一种自然的任务边界选择方式:以独立的请求为边界. -6.6.1 串行地执行任务 最简单的任务调度策略 ...
- 你想了解的轮询、长轮询和websocket都在这里了
日常生活中,有很多需要数据的实时更新,比如群聊信息的实时更新,还有投票系统的实时刷新等 实现的方式有很多种,比如轮询.长轮询.websocket 轮询 轮询是通过设置页面的刷新频率(设置多长时间自动刷 ...
- python中global变量释疑
疑问 为什么main中不能写global x语句? 在函数中如何修改global变量? 在main中修改了global变量后,在子进程中为什么没有效果? 如何利用进程池的initializer参数(函 ...
- WebDriver自动化测试工具(2)---基本操作
一.设置打开的浏览器大小/位置 driver.Manage().Window.Maximize(); //最大化 driver.Manage().Window.Position = , ); //设置 ...
- 前端读者 | 由setTimeout引发的JS引擎运行机制的研究
本文来自 @xiaoyuze88 链接:http://xiaoyuze88.github.io/ 太久没碰代码了,那天想到关于循环调用setTimeout实现每隔一秒输出递增的数的那个问题,搞了搞,发 ...
- nginx安装及配置文件详解
一)nginx安装及模块讲解 1.1.nginx安装步骤 mkdir /soft wget http://nginx.org/download/nginx-1.12.0.tar.gz tar zxf ...