1. 程式人生 > >Linux核心移植 part1:eMMC啟動

Linux核心移植 part1:eMMC啟動

這裡寫圖片描述

時間,就象海棉裡的水,只要願擠,總還是有的。 —— 魯迅

從建立部落格到現在陸陸續續有好幾個童鞋來找我要程式碼,其中有個問題經常提到:支不支援從emmc啟動。但是我移植uboot和kernel只是為了探究我自己感興趣的東東,所以沒有去關注emmc啟動的問題。最近工作正好告一段落,就來看看eMMC boot的問題吧。

uboot eMMC驅動框架簡介

檢查了uboot的程式碼,發現在2015.04版本中是通過一個統一的mmc驅動框架來管理mmc裝置的,也就是說sd mmc和emmc的操作方式是一樣的。比如有以下這些命令可供使用:

host > mmc info
host
> mmc dev [dev] [part] host > mmc list host > mmc partconf

裝置樹中預設是配置了8位元模式,但是由於pinmux和gpio的驅動還沒有相容,8位元模式還不能工作,暫時先改成4位元就可以正常讀寫了。

看看裝置資訊:

host > mmc list
SAMSUNG SDHCI: 0 (SD)
EXYNOS DWMMC: 1 (eMMC)
host > 
host > mmc dev 1
switch to partitions #0, OK
mmc1(part 0) is current device
host > 
host > mmcinfo
Device: EXYNOS DWMMC
Manufacturer ID: 15
OEM: 100 Name: 4YMD3 Tran Speed: 52000000 Rd Block Len: 512 MMC version 5.0 High Capacity: Yes Capacity: 3.6 GiB Bus Width: 4-bit Erase Group Size: 512 KiB HC WP Group Size: 8 MiB User Capacity: 3.6 GiB WRREL Boot Capacity: 4 MiB ENH RPMB Capacity: 512 KiB ENH host >

eMMC硬體分割槽介紹

eMMC的每一個硬體分割槽都是獨立編址的,所以在訪問前要先指定訪問哪一個分割槽,具體訪問哪一個分割槽由Extended CSD暫存器決定的。

partition_access.png

每個欄位的說明如下:

partition_bits.png

通過uboot命令把啟動映象燒寫到eMMC中

1. 利用sd boot進到uboot介面,檢視mmc裝置資訊。

host > mmc list
SAMSUNG SDHCI: 0 (SD)
EXYNOS DWMMC: 1

2. 通過partconf命令配置分割槽。

命令介紹如下:

host > mmc partconf
mmc partconf dev boot_ack boot_partition partition_access
 - Change the bits of the PARTITION_CONFIG field of the specified device
host >
host > mmc partconf 1 1 1 1

上面的partconf命令意思是:指定啟動分割槽boot1為啟動分割槽,當前訪問的分割槽也是boot1分割槽(參考Extended CSD暫存器說明)。

3. 燒寫映象到eMMC

host > fatls mmc 0
   283396   image.bin 
  5935832   uimage 
    37540   exynos4412-landrover.dtb

映象說明:image.bin是uboot映象,uimage是核心映象,exynos4412-landrover.dtb是裝置樹。

host > fatload mmc 0 40000000 image.bin
host > mmc write 40000000 0 400

然後OM選擇eMMC啟動,重啟就可以看到uboot介面了,如下:

landrover > OKhello.
copy BL2 ends.


U-Boot 2015.04-g02bb89f-dirty (Mar 02 2017 - 16:56:26) for LANDROVER

CPU:    [email protected]1000MHz
Model: landrover based on Exynos4412
DRAM:  1 GiB
WARNING: Caches not enabled
Pre-reloc malloc() used 0xdc bytes (0 KB)
Now running in RAM - U-Boot at: 7fe80000
MMC:   found 1 nodes with compatibility...
Found 1 mmc nodes
mmc4 clk source = 0x66666
mmc4 mask = 0x1011111
emmc dev index = 4, sclk = -1, freq = 400000000, div = 0
found 4 nodes with compatibility...
sd mmc count = 1.
probing host[0].
_gpio_request_by_name_nodev: fdtdec_parse_phandle_with_args failed
_gpio_request_by_name_nodev: Node '[email protected]', property 'pwr-gpios', failed to request GPIO index 0: -2
EXYNOS DWMMC: 0, SAMSUNG SDHCI: 1
*** Warning - bad CRC, using default environment

initr_env:450  load_addr = 0x40007000.
### main_loop entered: bootdelay=5

### main_loop: bootcmd="if mmc rescan; then echo SD/MMC found on device ${mmcdev};if run loadbootenv; then echo Loaded environment fro"
Hit any key to stop autoboot:  0

相關推薦

Linux核心移植 part1eMMC啟動

時間,就象海棉裡的水,只要願擠,總還是有的。 —— 魯迅 從建立部落格到現在陸陸續續有好幾個童鞋來找我要程式碼,其中有個問題經常提到:支不支援從emmc啟動。但是我移植uboot和kernel只是為了探究我自己感興趣的東東,所以沒有去關注emmc啟

Linux核心移植 part2uboot裝置樹--生成過程分析

本文從裝置樹軟體控制相關程式碼進行分析,進而理清裝置樹相關的知識。 先放一個裝置樹在記憶體中的結構圖: 分析來源為$(tree)/lib/fdtdec_test.c 一、資料結構 1.1 檔案頭 每個dtb都包含如下結構的檔案頭,用來表示裝

Linux核心移植 part2uboot 裝置樹--基本概念和原始碼介紹

arm uboot的裝置樹原始檔位於arch/arm/dts/目錄下,網路上有很多介紹Linux裝置樹概念的文章,這裡以dts相關的API為切入點,如果都懂了,裝置樹的東西就迎刃而解了。本篇文章首先記錄一些基本知識,下一篇進行原始碼分析。 一、裝置樹檔案基

Linux核心移植 part4關於initrd和initramfs

一、initrd ram disk中的file system叫做initrd,全名叫做initial ramdisk。 注意: 當下用initrams多 如何建立initial ramisk host > dd if=/dev/ze

Linux核心移植 part3Exynos4412核心編譯

為了在exynos 4412平臺上執行系統,選擇了linux來測試,因為只是用來測試的,所以並沒有完整功能的移植,只要能啟動就可以了。兼顧方便和先進性,選擇了4.1這個長期支援版本。從清華的源上下載速度比較快。 因為選擇的是uboot啟動,執行 $ ma

Linux核心移植 part3串列埠驅動

每日一樂:小美在作文簿裡寫上長大後的願望:一、我希望能有一個可愛的孩子;二、我還希望能有一個愛我的丈夫。結果,發現老師寫了一句評語:“請注意先後順序。” 介紹Linux kernel 4.1對exynos 4412串列埠的支援。 其實這部分工作已經過

移植好uboot和基於initramfs根檔案系統Linux核心的開發板的啟動過程

我們移植好uboot和Linux核心之後,當我們重啟之後,開發板首先做的事情就是將nandflash前4K的內容複製到SRAM中去,由於SRAM只有4K大小,所以我們必須將初始化CPU、記憶體、中斷、關閉開門狗以及nandflash中uboot拷貝到SDRAM中的的程式都放

讀書筆記LINUX核心完全剖析基於0.12核心

讀書筆記:LINUX核心完全剖析   IBM PC及其相容機主要使用 獨立編址方式,採用獨立的I/O地址空間對控制裝置中的暫存器進行定址和訪問,IBM PC也部分地使用統一編址。對於使用EISA、PCI等匯流排結構的PC,有64KB的I/O地址空間可供使用。在普通Li

linux核心移植步驟

2016.6.8 經過一個多星期的核心折磨,今天終於可以寫下自己移植核心的一些心得,網上有很多部落格論壇都有談到,但是這些又說的方式有些模糊,這裡我綜合的幾個部落格在重新說下核心替換編譯的步驟、以及如何更新啟動項grub。替換linux的核心一共有兩種方式,第一種方式是下載官方kerne

基於tiny4412的Linux核心移植(支援device tree)(三)

https://www.cnblogs.com/pengdonglin137/p/5146791.html 閱讀目錄(Content) 作者資訊 平臺簡介 注意 一、裝置樹反編譯 二、在u-boot列印資訊 三、開啟Linux核心啟動早期的log 四、在核心自解壓時dump記憶體 五、C

基於tiny4412的Linux核心移植(支援device tree)(二)

https://www.cnblogs.com/pengdonglin137/p/5143516.html 閱讀目錄(Content) 作者資訊 平臺簡介 步驟 回到頂部(go to top) 作者資訊 作者: 彭東林 郵箱:[email protected] QQ:4

基於tiny4412的Linux核心移植(支援device tree)(一)

https://www.cnblogs.com/pengdonglin137/p/5137941.html 閱讀目錄(Content) 作者資訊 平臺簡介 概述 步驟 回到頂部(go to top) 作者資訊 作者: 彭東林 郵箱:[email protected] Q

Linux核心移植 -- Kconfig

1 Kconfig的作用 在核心開發中我們在配置核心時,執行指令 make menuconfig 看到的配置介面,就是通過Kbuild-language讀取總目錄下的Kconfig語句生成的配置畫面,因此在配置核心時,瞭解Kconfig語法級顯得尤其重要 li

讀書筆記《Linux核心完全剖析基於0.12核心》——第三章 核心程式語言和環境

3.1 as86彙編器 linux 0.1x系統中使用了兩種彙編器(Assembler)。一種是能產生16位程式碼的as86彙編器,配套ld86連結器;另一種是GNU的彙編器gas(as),使用GNU ld連結器。 編譯器和連結器的原始碼可以從FTP伺服器ftp

Linux核心移植和根檔案系統製作(詳細步驟精講)

start_kernel是所有 Linux 平臺進入系統核心初始化後的入口函式,它主要完成剩餘的與硬體平臺相關的初始化工作,在進行一系列與核心相關的初始化後,呼叫第一個使用者程序-init 程序並等待使用者程序的執行,這樣整個 Linux 核心便啟動完畢。該函式所做的具體工作有:呼叫 setup_arch

linux核心移植與編譯

在瞭解了核心及其相關知識之後,就要著手核心移植的實驗了。 使用make menuconfig出現問題請移步make: *** 沒有規則可以建立目標“menuconfig”。 停止。   Linux核心移植與編譯 1.linux核心的下載 實驗開始之前,你需要自行下載li

linux核心移植到開發板步驟

1 解壓縮核心原始碼 2 給原始碼打補丁 3 配置   a  make(完全手動)   b 使用預設的配置,在上面修改   在arch/arm/configs/找到對應的配置檔案   xxxdefconfig   執行make xxxdefconfig   執行完成以後會

Linux核心分析 - 網路網橋原理分析

網橋資料包的處理流程     網橋處理包遵循以下幾條原則:     1.  在一個介面上接收的包不會再在那個介面上傳送這個資料包;     2.  每個接收到的資料包都要學習其源地址; &nbs

Linux核心分析 - 網路netif_receive_skb平臺報文入口函式詳解

網路收包流程從網絡卡驅動開始,一直往上,涉及NAPI、GRO、RPS等特性,但是一般最後都會呼叫__netif_receive_skb函式: 函式主要有幾個處理: 1、vlan報文的處理,主要是迴圈把vlan頭剝掉,如果qinq場景,兩個vlan都會被剝掉; 2、交給rx_h

imx6q處理器,linux作業系統平臺搭建 從eMMC啟動系統

[摘要:本文是參考http://blog.csdn.net/girlkoo/article/details/44536447戰http://blog.csdn.net/girlkoo/article/details/44626011那篇兩篇文章,然後把移植程序戰進修條記再次