學習嵌入式之驅動——系統移植(二)

一、uboot常用命令與環境變量

1.命令:

(1)環境變量操作命令

命令
功能格式
printenv
查看環境變量printenv
setenv新建/修改環境變量setenv 環境變量名 環境變量值
saveenv保存環境變量saveenv

(2)內存操作命令

命令
功能格式示例
md顯示內存值
md[.b,.w,.l] address [#of objects]
md.b 80000000 14
nm修改指定地址的內存值
nm[.b,.w,.l] address
nm.l 80000000
mw
使用個指定的數據填
充一段內存
mw[.b,.w,.l] address value [count]
mw,l 80000000
0A0A0A0A 10
cp
數據拷貝命令
cp[.b,.w,.l] source target count
cp.l 80000000
80000100 10
cmp
比較兩段內存數據是否 相等
cmp [.b,.w,.l] addr1 addr2 count
cmp.l 80000000
80000100 10

(3)網絡命令

(4)mmc操作命令

注意:千萬不要寫SD卡或者EMMC的前兩個塊(扇區),里面保存著分區表!

(5)boot命令

分區表

room固件 = 分區表

二、工程管理Makefile

1.語法

要生成的文件 : 依賴的所有文件

? ? ? ? 生成的方式

2.步驟

make - > Makefile \makefile -> 尋找文件中要生成的目標a.out - >尋找以來的所有的文件 - > 存在就利用命令生成目標文件、不存在,Makefile向下尋找依賴文件的生成方式

3.符號說明

  • :=? ? ?覆蓋原來的值
  • ?=? ?如果原來沒有值,就賦新值,原來有值,不賦新值??
  • +=? ?原來值的基礎上新加一個值

偽指令:.PHONY

示例代碼

4.分類處理(不同的平臺)

條件編譯1

????????

gcc main.c -D

makefile傳參

三、Uboot

1.Uboot編譯

?(1)uboot(跨平臺)作用

  • ? ? ? ??初始化硬件設備
  • ????????為加載內核做準備

(2)使用宏實現條件編譯,滿足條件的加入編譯中,不滿足的從編譯中去除

? ? ? ? 最頂層目錄.config 配置文件(宏的配置,如果宏配置到該文件中,則代碼加入uboot編譯);

(3)make V=0 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16

? ? ? ? 當前平臺為ARM,工具鏈為arm-linux-gnueabihf-,開啟16核編譯

????????ubootuboot.bin ->uboot.imx

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean? ? ? ? ? ? ? ? //清除.config
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-? ?mx6ull_alientek_emmc_defconfig????????//按照板子默認的來
make V=0 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16? ? ? ? //生成。bin文件

2.Linux系統啟動流程

Uboot第一階段:在芯片內部SRAM進行

(1)開發板上電,加載0x0地址,IMX6ULL96k出廠固件代碼(ROM),會根據啟動方式將對應的存儲設備前面的一段uboot代碼加載到RAM中執行

(2)出廠固件代碼以及uboot通過IMX6uLL內部的RAM;只能完成簡單操作

(3)對外設初始化(初始化DDR和EMMC)

(4).將IMX6ULL 96K ROM固件代碼搬移到 DDR中運行

Uboot第二階段:可對代碼進行運行,實現與用戶的交互

(5)外設逐一初始化

(6)進入與用戶交互的系統中,等待用戶按下按鍵

(7)如果用戶不操作uboot,倒計時結束后,會執行bootcmd

(8)引|導啟動內核 ( 需要串口、需要網口、文件系統的方式及路徑、需要設備樹... )

內核啟動階段:(加載驅動和五大功能實現的展開)

(9)內核啟動執行init進程 ( 0號內核進程 ,掛載文件系統)

Linux系統用戶態

(10)啟動用戶進程(fork+exec)啟動所有的進程

(11)啟動終端(可以與用戶實現交互

三、內核與設備樹文件

1.步驟

(1)源碼解壓

(2)進入源代碼中

(3)編譯生成.bin

  • make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean //清楚之前編譯的文件
  • make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_alientek_emmc_defconfig //以這次的imx_alientek_emmc_defconfig的設置作為.config設置,.config決定了額那些代碼加入編譯、那些嗲嗎從編譯中去除
  • make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig //用戶可以通過界面自行選擇或者修改.config
  • make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16? ? ? ? ?//編譯-J16

(4)編譯完成后可以獲得設備樹文件和內核鏡像文件

????????設備樹文件:????????arch/arm/boot/dts/imx6ull-alientek-emmc.dtb

????????內核鏡像鏡像:????????arch/arm/boot/zImage

(5)將以上兩個文件(內核鏡像、設備樹文件)拷貝到 ~/tftpboot

2.make menuconfig

* 驅動項編譯生成的zImage中包含該驅動項驅動(靜態加載)
M 驅動項
編譯生成的zImage中不包含該驅動項,該驅動將會成為一個獨立的模塊
驅動(動態加載)

(1)打開圖像界面 - > 圖形界面的配置項(根據Kconfig中語法解析得到)

Kconfig決定了menuconfig中有哪些選項,make menuconfig可以寫進.config

(2)勾選/去除/模塊選擇編譯目標 -> 根據用戶勾選將對應的宏寫入.config? ? ? ? 宏名 = y/m

(3)make -j16編譯的時候,頂層的makefile會調用每一層的makefile,每層makefile都會根據.config中的宏的配置決定哪些.o文件加入編譯,哪些.o文件不加入編譯 ---> vmlinux(可以調試的內核,體積很大)->Image(對vmlinux壓縮后的鏡像文件) ----> zImage(添加解壓算發的Image)


四、文件系統

1.文件系統生成工具

  • busybox:最核心最簡單,如果需要下載,需要自己搭建
  • buildboot:
  • yacto

2.流程

內核啟動后 ->掛載文件系統 ->執行linuxrc ->/etc/initab腳本(決定系統啟動執行哪些腳本、重啟執行哪些腳本、ctrlaltdel執行哪些腳本)->系統啟動執行 /etc/init.d/rcS腳本 ->設置環境變量、參數->掛載所有文件系統(mount-a)->執行/etc/fstab文件-> 掛載所有文件系統 ->/etc/profile腳本 ->啟動bash shell ->與用戶交互 ->./a.out ->fork+exec(./a.out)

3.自動啟動

把代碼放在/etc/profile 或者 /etc/init.d/rcS下,就可實現一啟動運行里面代碼;

五、系統移植重點總結

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94125.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94125.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94125.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

EasyExcel 合并單元格最佳實踐:基于注解的自動合并與樣式控制

EasyExcel 合并單元格最佳實踐:基于注解的自動合并與樣式控制 前言 在日常開發中,我們經常需要導出 Excel 報表,而合并單元格是提升報表可讀性的常見需求。本文將介紹如何基于 EasyExcel 實現智能的單元格合并功能,通過自定義注解…

Unity設置UI顯示區域

系列文章目錄 untiy工具 文章目錄 系列文章目錄 ??前言 ??一、效果圖 ??二、制作過程(檢測中心點位置) ??2-1、代碼實現 ??三、優化為檢測整個UI四個角點 ??四、性能優化建議 ??壁紙分享 ??總結 ??前言 思路: 獲取屏幕的寬度和高度,定義中間區域的范圍…

Qt中用于圖像縮放的核??法QPixmap::scaled

QPixmap::scaled是Qt中用于圖像縮放的核??法,其作?和?法如下:?一、核心作用??圖像尺寸調整?根據指定尺寸對圖像進?等?例或?等?例縮放,?持放?和縮?操作。?保持寬高比?通過AspectRatioMode參數控制是否保持原始圖像的寬??。…

SQL Workbench/J:一款免費開源、跨平臺的通用SQL查詢工具

SQL Workbench/J 是一款基于 Java 開發的免費開源、跨平臺的通用 SQL 查詢工具。 SQL Workbench/J 主要專注于 SQL 腳本開發和數據導入導出功能,不提供各種數據庫管理功能。 功能特性 跨平臺:可以在任何安裝了 Java 運行時環境的操作系統上運行&#xf…

DOLO 上漲:Berachain 生態爆發的前奏?

在 Berachain 生態逐漸進入公眾視野之際,Dolomite(簡稱 Dolomite,代幣 DOLO)成為鏈上表現最為突出的明星協議。其代幣價格在短短兩個月內,從 $0.03 飆升至 $0.3,漲幅接近 10 倍。市場不僅將其視作 Berachai…

吉利汽車與芯鼎微成立聯合創新實驗室共譜車規級LCoS顯示新篇章

2025年8月20日,吉利汽車研究院技術規劃中心副主任李莉、光學實驗室負責人李金樺博士等一行四人蒞臨芯鼎微,雙方共同為"吉利汽車-芯鼎微聯合創新實驗室"揭牌,標志著兩家企業在車載先進顯示技術領域邁入深度協同創新的新階段。 在這汽…

NPM組件 @angular_devkit/core 等竊取主機敏感信息

【高危】NPM組件 angular_devkit/core 等竊取主機敏感信息 漏洞描述 當用戶安裝受影響版本的 angular_devkit/core 等NPM組件包時會竊取用戶的主機名、用戶名、IP地址信息并發送到攻擊者可控的服務器地址。 MPS編號MPS-1jf5-s6ix處置建議強烈建議修復發現時間2025-08-14投毒…

docker cuda版安裝 dockercuda版安裝

目錄 1.一鍵安裝docker 測試ok 2.安裝cuda支持 通用的應該沒問題 安裝工具包 配置 runtime: 3.檢查 Docker 是否支持 NVIDIA 運行時 1.一鍵安裝docker 測試ok curl -fsSL https://get.docker.com | sh 2.安裝cuda支持 通用的應該沒問題 也可以搜索安裝 cuda版d…

Spring發布訂閱模式詳解

Spring 的發布訂閱模式(Publish-Subscribe Pattern)是一種基于事件驅動的設計模式,通過 "事件" 作為中間載體實現組件間的解耦。在這種模式中,"發布者"(Publisher)負責產生事件并發布&…

服務器硬件中的磁盤SSD與HDD性能區別,以及分別適用于什么業務?

SSD(固態硬盤)和 HDD(機械硬盤)是服務器中常見的存儲設備類型,兩者在性能、可靠性、成本等方面存在顯著差異。根據這些特性,它們適用于不同的業務需求。以下是詳細的對比與應用場景分析:1. SSD …

AI驅動的SEO關鍵詞優化秘籍

內容概要人工智能技術的飛速發展正重塑SEO關鍵詞優化領域,為從業者帶來全新機遇與挑戰。本文將系統解析AI如何革新關鍵詞策略,覆蓋從語義搜索深度解析到長尾詞智能挖掘的核心環節。通過工具驅動的內容優化路徑,讀者將掌握提升流量轉化率的關鍵…

自然語言處理(NLP)技術的發展歷史

自然語言處理(NLP)作為人工智能的重要分支,其發展歷程跨越了大半個世紀,從早期的規則式嘗試到如今的大模型時代,技術路徑不斷迭代,核心目標始終是實現人機間的自然語言交互。以下從關鍵階段、技術突破和標志…

Swift 解法詳解 LeetCode 361:轟炸敵人,用動態規劃輕松拿下

文章目錄摘要描述題解答案題解代碼分析代碼解析示例測試及結果時間復雜度空間復雜度總結摘要 “轟炸敵人”這道題名字聽起來就很帶感,它其實是一個二維網格搜索問題。我們要找到一個能放置炸彈的位置,讓炸掉的敵人最多。雖然題目看起來復雜,…

如何高效推進將科技創新成果轉化為標準?

2024年10月26日,全國標準信息公共服務平臺正式發布了國家標準《科技成果評估規范》(GB/T 44731-2024 ),并從發布之日起正式實施。這一標準的正式推出,標志著政府在推進科技成果轉化、提升科技服務能力方面邁出了重要一…

CMake 快速開始

CMake 快速開始 CMake 安裝 編輯環境:VS Code 編譯環境:VS Code Remote SSH模式 Ubuntu 24.04 CMake 官?源代碼下載地址:https://cmake.org/download/ CMake 官?英? 檔地址:https://cmake.org/cmake/help/latest/index.html S…

STM32F1 EXTI介紹及應用

第三章 EXTI介紹及應用 1. EXTI介紹 EXTI(External interrupt/event controller)—外部中斷/事件控制器,管理了控制器的 20 個中斷/事件線。每個中斷/事件線都對應有一個邊沿檢測器,可以實現輸入信號的上升沿檢測和下降沿的檢測。…

Oracle SYS用戶無法登錄數據庫-ORA-12162

錯誤詳情 [Oracleorcl bin]$ ./sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Mon Aug 18 08:12:04 2025 Copyright (c) 1982, 2013, Oracle. All rights reserved. ERROR: ORA-12162: TNS:net service name is incorrectly specifiedOS登錄解析 注意&…

【計算機視覺與深度學習實戰】06基于光流算法的實時運動檢測系統設計與實現——以蚊子軌跡追蹤為例(有完整代碼)

第一章 引言 計算機視覺作為人工智能領域的重要分支,近年來在目標檢測、運動分析、行為識別等方面取得了顯著進展。其中,運動檢測技術作為視頻分析的基礎技術之一,在安防監控、交通管理、體感交互、生物行為研究等領域發揮著越來越重要的作用。光流算法作為運動檢測的經典方…

國產CANFD芯片技術特性與應用前景綜述:以ASM1042系列為例

摘要本文綜述了國科安芯推出的國產CANFD芯片ASM1042系列的技術特性與應用前景。ASM1042系列作為一款高性能的CANFD收發器,支持5Mbps的高速通信和高達70V的總線耐壓,廣泛應用于汽車電子、工業控制和航空航天等領域。文中詳細分析了其高速率設計、高耐壓設…

偶現型Bug處理方法---用系統方法對抗隨機性

在軟件開發中,Bug是影響產品質量的核心問題,而偶現型Bug(Intermittent Bug)因其“時隱時現、難以復現”的特性,成為最頭疼的挑戰之一。這類Bug不像必現Bug那樣有穩定的觸發路徑,可能在特定環境、特定操作序…