您的位置:首页 > 运维架构 > Linux

基于tiny4412的Linux内核移植 -- eMMC驱动移植(六)

2016-01-26 22:53 489 查看

作者信息

作者:彭东林

邮箱:pengdonglin137@163.com

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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: