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

发布者:Yuexin888最新更新时间:2023-06-21 来源: elecfans关键字:tiny4412  Linux  内核移植  eMMC  驱动移植 手机看文章 扫描二维码
随时随地手机看文章

平台简介

开发板: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这部分电路都在核心板上:

image

 

image

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

image

 二、修改设备树

这部分我参考了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内核移植 -- eMMC驱动移植(六)

上一篇:基于tiny4412的Linux内核移植 -- SD卡驱动移植(五)
下一篇:基于tiny4412的Linux内核移植 -- PWM子系统学习(七)

推荐阅读最新更新时间:2024-11-17 16:26

ARM与嵌入式linux的入门建议
由于很多人总问这个问题,所以这里做一个总结文档供大家参考。这里必须先说明,以下的步骤都是针对Linux系统的,并不面向WinCE。也许你会注意到,现在做嵌入式的人中,做linux研究的人远比做WinCE的人多,很多产家提供的资料也是以linux为主。我一直很难理解,其实WinCE的界面比linux的界面好看多了,使用起来也很方便,更为重要的是,WinCE的开发和Windows下的开发基本一样,学起来简单得多,但是学linux或者使用linux做嵌入式的人就是远比WinCE多。在和很多工作的人交流时我了解到,他们公司从没考虑使用WinCE,因为成本高,都是使用linux进行开发。我读研究生的的实验室中也没有使用WinCE的,大都
[单片机]
4412 最简Linux驱动
最简Linux驱动 必备的头文件 • Linux头文件位置 – 类似#include linux/module.h 的头文件,它们是在Linux源码目录下的include/linux/module.h • #include linux/module.h 头文件 – 所有的Linux 代码必须遵循GPL 协议,如果不知道Linux 的GPL 协议,去查一下资料 – 如果你不声明GPL 协议,你的模块将无法在Linux 中使用的 – MODULE_LICENSE(_license)添加遵循GPL协议,必须的! – MODULE_AUTHOR(_author)代码作者 • #include linux/init.h – 包含初
[单片机]
4412 最简<font color='red'>Linux</font><font color='red'>驱动</font>
Linux On iPhone将面世 支持iOS双启动
据 FOSSBRTES 报道称,用户很快将可以通过双启动功能,像在 Android 设备上那样在 iPhone 上运行 Linux。目前,越狱者、开发人员 Raffaele 以及 mcg29 已在其 Github 页面上发布了详细说明,详细介绍了如何双启动 64 位 iOS 设备。 这些说明内容包括有:用于对根文件系统进行分区和还原、创建自定义ramdisk、修改文件系统分区以及引导至设备的详细步骤。 A 64bit dual boot tutorial, brought to you by @Ralph0045 and @mcg29_https://t.co/PqumNzNcBz — mcg29 (@mcg29
[手机便携]
讯为4412开发板运行linux系统无法挂载U盘?
基于讯为4412开发板: 插上U盘 usb 1-3.3: new high speed USB device number 7 using s5p-ehci usb 1-3.3: New USB device found, idVendor=0951, idProduct=1666, bcdDevice=0100 usb 1-3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 1-3.3: New USB device Class: class= 0 , SubClass=0, Protocol=0 usb 1-3.3: Product: D
[单片机]
tiny4412学习笔记-将uboot、zImage、文件系统烧到emmc
1、首先还是要将u-boot写入SD卡中从SD卡启动。 使用读卡器将SD插入电脑中,使用umount卸载u盘, fdisk -l显示其挂载点为 /dev/sdb1 切换到/home/bunfly/images/uboot_tiny4412/sd_fuse/tiny4412目录下,执行./sd_fusing.sh /dev/sdb 拨动最右边开关选择从SD卡启动。 附加编译过程:   1.进入开发板提供的源码文件包,解压uboot源码包。   cd /home/bunfly/source_code/   tar xf uboot_tiny4412-20130729.tgz   2.进入uboot文件夹,更改uboot中t
[单片机]
<font color='red'>tiny4412</font>学习笔记-将uboot、zImage、文件系统烧到<font color='red'>emmc</font>中
02 Linux入门命令
1 shell解释器 shell解释器接收输入字符并马上显示,在输入回车后,根据字符串去查找命令。去哪找?去环境变量指定的路径去找。 # 显示环境变量 echo $PATH # 结果如下 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/arm/bin 什么是命令?命令就是可执行程序。 shell解释器根据第一个字符串去找应用程序,把后面的字符串作为参数传给应用程序,然后执行应用程序。为了测试shell,写了如下的c测试代码。 #include std
[单片机]
02 <font color='red'>Linux</font>入门命令
基于Linux嵌入式操作系统掌上娱乐系统设计方案
近年来,随着微处理器技术、DSP技术、多媒体编解码技术以及嵌入式技术的发展,多媒体娱乐终端已经成为消费性电子产品的热点。同时,逐渐成熟的市场随着MP3在市场上取得的巨大成功,以及MP4、数字电视、3G通讯等相关技术的起步,在未来几年内都将会得到快速发展。 嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 多媒体终端正是数字信息产业的一个重要组成部分,所以在这个背景下,MultimediaTerminal蕴含着极大地发展潜力。 本文是基于Linux嵌入式操作系统在UP-TECHS3C2410DVK1。1开发平台下设计并实现了一个高
[单片机]
基于<font color='red'>Linux</font>嵌入式操作系统掌上娱乐系统设计方案
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved