基於tiny4412的Linux內核移植 -- eMMC驅動移植(六)

来源:http://www.cnblogs.com/pengdonglin137/archive/2016/01/26/5161863.html
-Advertisement-
Play Games


作者信息

作者: 彭東林

郵箱:[email protected]

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這部分電路都在核心板上:

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

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Mac Android ADT Bundle+真機調試 ——配置
  • 什麼是單例模式 1.單例模式是一個類在系統中只有一個實例對象。通過全局的一個入口點對這個實例對象進行訪問。在 iOS 開發中,單例模式是非常有用的一種設計模式。如 下圖,是一個簡單單例模式的 UML 類圖。 2.iOS SDK 中也有許多類使用了單例模式,例如,UIApplication:當程式啟動...
  • 利用分類,NSString,增加一個方法。#import #import @interface NSString (Height)+ (CGSize)getRect:(NSString *)textStr andWidth:(CGSize)size andFont:(UIFont *)font;@e...
  • SQL Server代理是所有實時資料庫的核心。代理有很多不明顯的用法,因此系統的知識,對於開發人員還是DBA都是有用的。這系列文章會通俗介紹它的很多用法。在以前的文章里我們看到,SQL Server代理由一系列的作業步驟組成,每個作業步驟是要進行的不同工作類型。SQL Server代理也提供創建警...
  • 獲取【下載地址】 QQ: 313596790 【免費支持更新】A 代碼生成器(開發利器); 增刪改查的處理類,service層,mybatis的xml,SQL( mysql 和oracle)腳本, jsp頁面 都生成 就不用寫搬磚的代碼了,生成的放到項目里,可以直接運行B 阿裡巴巴資料庫連接池dr....
  • 一、簡介Redis是一種高級key-value資料庫,數據可以持久化,支持的數據類型很豐富,有字元串,哈希,鏈表,集合和有序集合5種數據類型Redis支持在伺服器端計算集合的並,交和補集(difference)等,還支持多種排序功能,所以Redis也可以被看成是一個數據結構伺服器Redis的所有數據...
  • 安裝首先是下載,地址奉上:http://www.google.cn/chrome/browser/desktop/index.html,選擇64 bit .rpm (適用於 Fedora/openSUSE) ,當然如果你是32位系統那麼你可以選擇32 bit .rpm (適用於 Fedora/ope...
  • 這是一塊便宜 (¥12.5)的 WiFi 模塊,3.3V ,晶元是樂鑫科技(Espressif)出品。它本身是很多玩法,比如這個 NodeMCU (淘寶有套件焊接好一整套的帶 USB 介面的,搜 esp8266 nodemcu)。 我這是沒多久之前買的。要買的話,多幾塊錢可以有更完整引腳的版本,樂鑫...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...