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暫存器決定的。
每個欄位的說明如下:
通過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核心移植 part1:eMMC啟動
時間,就象海棉裡的水,只要願擠,總還是有的。 —— 魯迅 從建立部落格到現在陸陸續續有好幾個童鞋來找我要程式碼,其中有個問題經常提到:支不支援從emmc啟動。但是我移植uboot和kernel只是為了探究我自己感興趣的東東,所以沒有去關注emmc啟
Linux核心移植 part2:uboot裝置樹--生成過程分析
本文從裝置樹軟體控制相關程式碼進行分析,進而理清裝置樹相關的知識。 先放一個裝置樹在記憶體中的結構圖: 分析來源為$(tree)/lib/fdtdec_test.c 一、資料結構 1.1 檔案頭 每個dtb都包含如下結構的檔案頭,用來表示裝
Linux核心移植 part2:uboot 裝置樹--基本概念和原始碼介紹
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核心移植 part3:Exynos4412核心編譯
為了在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那篇兩篇文章,然後把移植程序戰進修條記再次