1. 程式人生 > >移植uboot,並且修改配置引數,系統啟動方式總結

移植uboot,並且修改配置引數,系統啟動方式總結

(文章屬個人總結,如有理解錯誤,請不惜指教。)

前言:uboot,其實就是比較複雜的裸板程式,核心是命令,最終的目的,是啟動kernel。

            uboot的啟動,分有兩個階段。

第一階段:

(每個階段首先需要做的,都是初始化硬體,這個也是uboot的優點和作為。)

CPU/*/start.S  /board/*/ lowlevel_init.S

①初始化硬體:設定異常向量(比如未定義向量、軟體中斷、資料操作異常等,這些需要的時候看程式碼吧。)

這個過程中,還需要CPU進入SVC模式,其實就是寫一個值到暫存器,0x10011到r0暫存器。

關看門狗,往看門狗暫存器寫入值0。

②拷貝uboot到SDRAM

③設定棧SP,sp指標指向一段沒有被使用的記憶體就完成棧的設定

④清空BSS段(全部把不用的清除掉,防止佔用資源) 初始值為0,無初始值的全域性變數,靜態變數將自動被放在BSS段

將這些變數的初始值賦為0,否則這些變數的初始值將是一個隨機的值,若有些程式直接使用這些沒有初始化的變數將引起未知的後果。

⑤跳轉到第二階段執行C程式碼  ldr   pc, _start_armboot

start_armboot函式在lib_arm/board.c中定義,是U-Boot第二階段程式碼的入口

第二階段:

①板級初始化

串列埠:為了控制,列印命令

時鐘;CPU可以控制外圍裝置

其他環境變數。這個過程會列印uboot的版本資訊之類的。

②記憶體對映

檢測SDRAM記憶體大小,配置可以用的RAM大小。

③載入核心影像+根檔案系統映像

初始化NOR或者NAND

④設定核心啟動引數

⑤啟動核心

目標:修改系統啟動方式為SD卡以及EMMC

首先,我們知道,uboot的預設啟動方式是NOR flash,現在基於這個基礎上,增加SD卡啟動以及EMMC啟動。

EMMC,實際上就是nand flash+主控IC,nand flash可以快讀讀寫,但是在讀寫的時候,需要做一些特定事情,這些事情,也是判斷是nand還是nor啟動,所以這裡就暫時不討論EMMC啟動方式了,進入主題:SD卡啟動

IROM的啟動方式,裡面提供有SD卡啟動方式的支援。

注意點:

①SD卡里面,不管怎麼格式化,還是會顯示,佔用有8KB記憶體,這是怎麼回事呢?

答:因為這是預留給分割槽表使用的。實際上,我們用不到8K,只是預留這麼多而已。

②使用dd命令,將Uboot拷貝到SD卡

整個思路:

全志平臺CPU,內建的韌體,是支援uboot從不同的儲存介質啟動的,但是,uboot的預設啟動方式是NOR flash,這個時候,我們如果移植uboot的話,需要修改uboot裡面的啟動引數,意思就是說,uboot引導啟動kernel到rootfs,預設是從nor flash上面啟動的,現在,我們想把kernel以及rootfs,也就是通俗的說,系統,從SD卡或者EMMC啟動。

這些引數,可以在uboot的mian.c裡面修改,寫死。

也可以在uboot命令列模式下setenv配置,然後重新啟動即可。

相關推薦

移植uboot並且修改配置引數系統啟動方式總結

(文章屬個人總結,如有理解錯誤,請不惜指教。)前言:uboot,其實就是比較複雜的裸板程式,核心是命令,最終的目的,是啟動kernel。            uboot的啟動,分有兩個階段。第一階段:(每個階段首先需要做的,都是初始化硬體,這個也是uboot的優點和作為。)

16.如何做到webpack打包vue項目後可以修改配置文件

r.js all config rest 技術分享 req api local err 問題描述: 前端需要修改restful API的url,但是打包之後,配置文件找不到了,如果在npm run build 生成dist後,這個配置也被寫死了,傳到運行的前端服務器上後,假

redis安裝修改配置檔案多例項部署 redis-server

redis 安裝 解壓: [[email protected] software]# tar -xvf redis-3.2.11.tar.gz 進入redis根目錄: [[email protected] software]# cd redis-3.2.11/ 編譯安裝: [[

spring-boot提供類可以直接修改tomcat引數例如port

文件參考:https://docs.spring.io/spring-boot/docs/2.0.1.BUILD-SNAPSHOT/reference/html/ @Bean public ConfigurableServletWebServerFactory webServerFa

Mysql忘記密碼登入並且修改密碼

one 進入電腦mysql的安裝目錄,並且找到data 比如我的就是C:\Program Files\MySQL\MySQL Server 8.0\data two 找到字尾為.err的檔案 比如我的為下圖 three 記事本開啟.err檔案,然

ngnix優化高併發配置引數worker_processes

/etc/nginx/nginx.conf worker_processes預設為1,官方說1一般情況足夠了 也可以設定為cpu核心說,2或者4或者8,再高沒大意義 或者省事些,直接設定為auto,根據需求自動調整 參考

linux系統redis修改配置檔案允許外網訪問,新增登入密碼

修改配置檔案redis.conf sudo vim /etc/redis/redis.conf 重啟redis服務(非常重要) /etc/init.d/redis-server restart  下面開始登入 當輸入redis-cli的時候是登入不進去

Spring定時任務開發實現動態修改時間引數手動開啟關停等

@Service @Lazy(false) @EnableScheduling public class MyScheduler extends BaseService implements SchedulingConfigurer{ public static String cron

js引數傳遞陣列物件修改引數會影響原陣列嗎

1,方法中改變了原資料的,會影響原陣列,包括單個的賦值,排序 var a = [1,2,3]; function test(arr){ arr[0] = 4;//直接改變原陣列的第一個資料,影響原陣列,故改變了原陣列。 console.log(arr);//

spring mvc 中通過controller 傳遞物件給jsp並且資料繫結修改值後回傳物件給controller

在controller 中需要指定 sessionAttribute的key @sessionattributes註解應用到Controller上面,可以將Model中的屬性同步到session當中。 當需要清除session當中的值得時候,我們只需要在

Android自定義控制元件之畫圓並且修改其填充色

畫圓就是簡答呼叫了drawCircle的api public class Dot extends View { public Dot(Context context) { s

Qt中QDomDocument讀取txt檔案和xml檔案並且修改xml檔案和儲存修改後的檔案

此文件main.cpp檔案分為兩部分: 1】上面是讀取txt文件的程式碼 2】下面是讀取和修改xml文件的內容,並且儲存xml修改的程式碼 #include<QGuiApplication> #include<QQmlApplicationEngine&

CentOS7.5下修改配置檔案使正常顯示中文

雷:在CentOS 7以前的版本下,預設的字符集路徑一般儲存在/etc/sysconfig/i18n 檔案中。但是在CentOS 7版本中,字符集配置檔案位於/etc/locale.conf。 在修改該檔案之前,可以在命令列介面輸入locale -all先檢視

MDK關於 STM32F4 配置失敗 GPIO USART 寫入值沒反應

pos blog 位置 size inf 需要 str bsp font 需要先將RCC->AHB1ENR寄存器的對應時鐘打開! 下面做個測試: 配置GPIO實驗 沒有打開時鐘使能,配置無反應: 打開時鐘使能後,可以成功寫入數據:

Restful風格PUT修改功能請求表單中存在文件報錯-HTTP Status 405 - Request method 'POST' not supported

for 文件的 文件 roo spring commons 容量 put common 解決方案配置如下 <!-- 配置文件上傳解析器 --> <bean id="multipartResolver" class="org.spri

java--Fibonacc由數字1、1、2、3...組成的從第三個數字起每一個數字為前兩個數字的和。建立一個方法接受一個整數引數,顯示從第一個元素開始總共由該引數指定的個數所構成的所有斐波那契數

題目完整描述:一個斐波那契數列是由數字1、1、2、3、5、8、13、21、34等等組成的,其中每一個數字(從第三個數字起)都是前兩個數字的和。建立一個方法,接受一個整數引數,並顯示從第一個元素開始總共由該引數指定的個數所構成的所有斐波那契數字。例如,如果執行 java Fibonacci 5(Fib

關於servlet3中使用註解配置之後訪問無效的解決方法

web專案中的web.xml檔案的根元素如果是從其他地方拷貝的,如下所示 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

在建立server的時候選擇tomcat8後server name為空並且無法手動輸入同時無法進行下一步操作。

解決方案如下: 1.退出eclipse。 2.找到eclipse[工作空間][當前專案].metadata/.plugins/org.eclipse.core.runtime/.settings/下 3.刪除兩個檔案,檔名是org.eclipse.wst.server.core.pref

使用SpringMVC的crud操作時進行資料修改但是修改成功後頁面無法顯示lastName屬性值(被修改的那條記錄)

我這個錯誤的原因在於,把map的鍵寫錯了,它必須和類名第一個字母小寫相同 @ModelAttribute public void getEmployee(@RequestParam(value="id",required=false) Integer id, Map&l

Struts2學習筆記:DMI多個配置檔案預設Action字尾

動態方法呼叫有三種方法: 1.同一Action多次對映,每個action標籤的method對應要呼叫的方法。 當要呼叫的方法多了就會增加struts.xml檔案的複雜性。 2.struts.DynamicMethodInvocation=true (struts.properties檔案) 或<