原创 uboot的編譯及連接過程

前言   想讀懂uboot的鏈接腳本,以及瞭解鏈接腳本的使用方法,需要掌握以下基本知識。 1、gcc程序段介紹   一個可執行程序主要包含text段(代碼),data段(初始化的全局變量),以及bss段(未初始化的全局變量)。局部

原创 ARM Linux啓動流程-start_kernel階段

start_kernel的主要功能   start_kernel()函數是內核初始化C語言部分的主體。這個函數完成系統底層基本機制,包括處理器、存儲管理系統、進程管理系統、中斷機制、定時機制等的初始化工作。   分析所在文件:i

原创 ARM Linux啓動流程-彙編第二階段

本文整理了ARM Linxu啓動流程的第二階段——start_kernel前啓動階段(彙編部分),內核版本爲3.12.35。我以手上的樹莓派b(ARM11)爲平臺示例來分析Linux內核在自解壓後到跳轉運行start_kernel之前所

原创 uboot啓動流程詳解(1)-_start

(1)代碼及註釋 .globl _start /*聲明一個符號可被其它文件引用,相當於聲明瞭一個全局變量, .globl與.global相同*/ _start: b reset /* b是不帶返回的跳轉(bl是帶返回的跳轉),

原创 uboot啓動流程詳解(2)-reset

1、源碼及註釋   reset是uboot最先執行的代碼,接下來我們來看看reset的具體流程。 reset: /*如果沒有重新定義save_boot_params,則使用<arch/arm/cpu/armv7/start

原创 ARM Linux啓動流程-前傳

1、zImage的組成   zImage是由一個壓縮後的內核piggy.o,連接上一段初始化及解壓功能的代碼(head.o misc.o)組成的。 2、Linux的入口   內核從什麼地方開始運行呢?當然要看lds文件啦。z

原创 uboot啓動流程詳解(5)-_main

前言   _main標號中主要調用的函數有三個,board_init_f,relocate_code,board_init_r,這裏先貼出_main的代碼並註釋,然後對這三個函數的流程及原理進行詳細介紹。 1、代碼註釋 ENTRY

原创 ARM Linux啓動流程-彙編第一階段

轉載地址:http://blog.csdn.net/luckyapple1028/article/details/44726131 本文整理了ARM Linxu啓動流程的第一階段——內核自解壓,內核版本爲3.12.35。我以手上的

原创 開發一個字符設備驅動

1、什麼是字符設備  1.1 基本概念   字符設備是指只能一個字節一個字節讀寫的設備,不能隨機讀取設備內存中的某一數據,讀取數據需要按照先後數據。字符設備是面向流的設備,常見的字符設備有鼠標、鍵盤、串口、控制檯和LED設備等。

原创 MMU內存管理單元介紹

前言   本篇文章簡要闡述MMU的概念,以及以段地址的轉換過程爲例,簡單說明MMU將虛擬地址轉換成物理地址的過程。更多詳細內容請查看《ARM-MMU(中文手冊).pdf》。 1、MMU概述   在ARM存儲系統中,使用MMU實現虛

原创 ARM Linux啓動流程-根文件系統的加載

前言   在Kernel啓動的初始階段,首先去創建虛擬的根文件系統(rootfs),接下來再去調用do_mount來加載真正的文件系統,並將根文件系統切換到真正的文件系統,也即真實的文件系統。   接下來結核內核代碼(內核版本:

原创 va_start和va_end使用詳解

轉載地址:http://www.cnblogs.com/hanyonglu/archive/2011/05/07/2039916.html C函數傳遞參數的用法和原理 1.1 用法   在C中,當我們無法列出傳遞函數的所有實參的

原创 uboot啓動流程詳解(3)-cpu_init_cp15

1、代碼及註釋 說明:   1、關於p15協處理及其指令的介紹請看《ARM協處理器介紹 》。   2、關於mmu的詳細介紹請查看《 MMU內存管理單元介紹 》。   3、如果想要詳細閱讀以下代碼,需要查閱arm的參考手冊《A

原创 ARM協處理器介紹

什麼是協處理器   協處理器是一種芯片,用於減輕系統微處理器的特定處理任務。例如,數學協處理器可以控制數字處理;圖形協處理器可以處理視頻繪製。例如,intel pentium微處理器就包括內置的數學協處理器。   協處理器可以附

原创 編譯地址與運行地址

(1)什麼是編譯地址   32位的處理器,它的每一條指令是4個字節,以4個字節存儲順序,進行順序執行,CPU是順序執行的,只要沒發生什麼跳轉,它會順序進行執行行, 編譯器會對每一條指令分配一個編譯地址,這是編譯器分配的,在編譯過