基于tiny4412的Linux内核移植 -- eMMC驱动移植(六)
2016-01-26 22:53
489 查看
作者信息
作者:彭东林邮箱:
QQ:405728433
平台简介
开发板:tiny4412ADK+S700+4GBFlash要移植的内核版本:Linux-4.4.0(支持devicetree)
u-boot版本:友善之臂自带的U-Boot2010.12(为支持uImage启动,做了少许改动)
busybox版本:busybox1.25
eMMC:KLMxGxFE3x-x00x
交叉编译工具链:arm-none-linux-gnueabi-gcc
(gccversion4.8.320140320(prerelease)(SourceryCodeBenchLite2014.05-29))
概述
eMMC驱动在内核中也已经支持好了,代码在:drivers/mmc/host/dw_mmc-exynos.c,我们要做的就是修改设备树配置文件。移植
一、原理图eMMC这部分电路都在核心板上:
从上图看到,tiny4412上exynos4412与eMMC传输数据的总线宽度是8位,使用的控制器是MobileStorageHost,占用了SDMMC0和SDMMC1的资源,即SDMMC0和SDMMC1的引脚被复用为SD_4功能。具体信息请参考Exynos4412的用户手册的第23节MobileStorageHost:
二、修改设备树
这部分我参考了arch/arm/boot/dts/exynos4412-trats2.dts,对arch/arm/boot/dts/exynos4412-tiny4412.dts做了如下修改:
[code]diff--gita/arch/arm/boot/dts/exynos4412-tiny4412.dtsb/arch/arm/boot/dts/exynos4412-tiny4412.dts
indexbd823eb..585cab7100644
---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=<23>;
+samsung,dw-mshc-ddr-timing=<12>;
+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";
};
[/code]
实际测试时发现不设置vmmc-supply也可以正常工作,上面的这些参数我直接从arch/arm/boot/dts/exynos4412-trats2.dts拷贝过来的,没有做任何改动,其中mshc0是在arch/arm/boot/dts/exynos4x12.dtsi定义的:
[code]mshc_0:mmc@12550000{
compatible="samsung,exynos4412-dw-mshc";
reg=<0x125500000x1000>;
interrupts=<0770>;
#address-cells=<1>;
#size-cells=<0>;
fifo-depth=<0x80>;
clocks=<&clockCLK_SDMMC4>,<&clockCLK_SCLK_MMC4>;
clock-names="biu","ciu";
status="disabled";
};
[/code]
三、测试
下面是启动log:
[code][2.286502]dwmmc_exynos12550000.mmc:IDMACsupports32-bitaddressmode.
[2.286613]dwmmc_exynos12550000.mmc:UsinginternalDMAcontroller.
[2.289979]dwmmc_exynos12550000.mmc:VersionIDis240a
[2.295396]dwmmc_exynos12550000.mmc:DWMMCcontrolleratirq89,32bithostdatawidth,128deepfifo
[2.304812]dwmmc_exynos12550000.mmc:Novqmmcregulatorfound
[2.340643]dwmmc_exynos12550000.mmc:1slotsinitialized
[2.341935]usbcore:registerednewinterfacedriverusbhid
[2.341991]usbhid:USBHIDcoredriver
[2.344435]NET:Registeredprotocolfamily10
[2.345015]sit:IPv6overIPv4tunnelingdriver
[2.345497]NET:Registeredprotocolfamily17
[2.346734]NET:Registeredprotocolfamily15
[2.351355]RegisteringSWP/SWPBemulationhandler
[2.357490]hctosys:unabletoopenrtcdevice(rtc0)
[2.365652]usb2-2:newhigh-speedUSBdevicenumber2usingexynos-ehci
[2.380409]ALSAdevicelist:
[2.380451]Nosoundcardsfound.
[2.381460]RAMDISK:gzipimagefoundatblock0
[2.383346]mmc1:MAN_BKOPS_ENbitisnotset
[2.384095]mmc_hostmmc1:Busspeed(slot0)=50000000Hz(slotreq52000000Hz,actual50000000HZdiv=0)
[2.392918]mmc_hostmmc1:Busspeed(slot0)=100000000Hz(slotreq52000000Hz,actual50000000HZdiv=1)
[2.402558]mmc1:newDDRMMCcardataddress0001
[2.407922]mmcblk0:mmc1:0001M4G1YC3.64GiB
[2.412049]mmcblk0boot0:mmc1:0001M4G1YCpartition12.00MiB
[2.417930]mmcblk0boot1:mmc1:0001M4G1YCpartition22.00MiB
[2.424030]mmcblk0rpmb:mmc1:0001M4G1YCpartition3128KiB
[2.430169]mmcblk0:p1p2p3p4
[/code]
查看一下:
[code][root@tiny4412]#ls/dev/mmcblk*-l
brw-rw----100179,0Jan100:00/dev/mmcblk0
brw-rw----100179,16Jan100:00/dev/mmcblk0boot0
brw-rw----100179,32Jan100:00/dev/mmcblk0boot1
brw-rw----100179,1Jan100:00/dev/mmcblk0p1
brw-rw----100179,2Jan100:00/dev/mmcblk0p2
brw-rw----100179,3Jan100:00/dev/mmcblk0p3
brw-rw----100179,4Jan100:00/dev/mmcblk0p4
brw-rw----100179,48Jan100:00/dev/mmcblk0rpmb
brw-rw----100179,64Jan100:00/dev/mmcblk1
brw-rw----100179,65Jan100:00/dev/mmcblk1p1
[/code]
其中mmcblk1是我们的sdcard,mmcblk0是核心板上的eMMC。我在eMMC中烧写的是Android系统,可以看到Android系统有7个分区,下面我们挂载一个分区看看:
[code][root@tiny4412]#mount-text4/dev/mmcblk0p2/mnt
[287.710063]EXT4-fs(mmcblk0p2):mountedfilesystemwithordereddatamode.Opts:(null)
[root@tiny4412]#ls/mnt/
addon.dbuild.propfontslost+foundttsxbin
appbusyboxframeworkmediausr
binetclibpriv-appvendor
[/code]
代码我已经上传到了github上:
[code]gitclonehttps://github.com/pengdonglin137/linux-4.4_tiny4412.git-bport_to_tiny4412
[/code]
相关文章推荐
- linux性能调试----cpu篇
- CentOs 基础知识
- 【linux】free命令中cached和buffers的区别
- CentOs5.11 快捷键
- Linux_自己编写一个who命令
- linux更改目录权限
- Linux下的多线程调试
- 常用linux命令
- Linux C 可变参数的简单例子
- Linux 安全
- Linux CentOS6.5 搭建SVN服务器(一)
- Linux ALSA声卡驱动之五:移动设备中的ALSA(ASoC)
- CentOS6.5 python+ipython安装
- Linux内核调试工具: Crash - 1
- 作为一个新人,怎样学习嵌入式Linux?
- Linux ALSA声卡驱动之四:Control设备的创建
- Linux环境搭建
- Linux操作系统CentOS7.2发行版本的安装与配置
- Linux-IPC之管道
- Linux 系统下查看硬件信息命令大全