Linux開發追蹤(IMX6ULL篇_第一部分)

前言

參數:cortex-A7? 698Mhz? ?flash? 8GB? ? RAM? 512M DDR3

2個100M網口? 單核

初期:

一、安裝完虛擬機之后,第一步先設置文件之間可以相互拷貝復制,以及通過CRT連接到虛擬機等

折磨死人了啊啊啊啊啊啊

1、關于SSH怎么安裝指令都有,然后啟動SSH服務就行,查看等

入坑點:1.window下一定要看有沒有網絡適配器VM8這樣的,并且和主機,以及虛擬機三者在同一網絡下,如果沒有適配器,卸載重裝,刪除注冊表

2.NAT無法連接,必須橋接模式,然后查看ip地址必須是同一網段內的

3.設置網絡編輯器

4.一定虛擬機和window下相互ping通才行,然后CRT登錄Ubuntu的ip地址,以及用戶名就行了

二、第二個折磨死人的就是SAMBA,虛擬機映射到window了

參考:第四課:安裝samba映射網絡磁盤到本地_云服務器samba如何映射到本地-CSDN博客

其中靜態路由,最后啟用工作站那么起始都不需要,

配置文件可以這樣寫:無論是ubuntu的登錄名還是文件名都是dzc? ?

創建添加的samba的用戶名也是dzc密碼1,這個就是最后有個網絡憑證需要登錄的用戶名和密碼

還有一點,一定要使用橋接的方式,兩者之間也要ping通

防火墻要關掉,實在不行可以卸載重裝

還有一種方式就是使用僅主機模式,適用于同一臺電腦主機和虛擬機共享連接

第一步選擇VM1的主機模式

然后配置虛擬網絡編輯器

主機虛擬網卡配置

最后看主機和虛擬機之間能不能相互ping通,然后就可以登錄SECURE CRT 和SMBA了。

三、取任一個ubuntu軟件,第一步是交叉編譯工具安裝

第二步創建文件夾? ?拷貝過去之后,解壓文件? ?tar -xvf?

sudo cp gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/ -f

添加環境變量:

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

設置完之后重啟生效,檢查版本號

第二步是安裝VSCODE :建議下載最新版

插件安裝

找到設置,字體,中文,不要使能預覽

下面的USB是串口,要用跳線帽修改

不建議使用引腳復用,會增加設備樹,很麻煩。

中期:準備上手

匯編學習:

.text? 代碼段

.data 初始化的數據段

.bss 未初始化的數據段

.rodata? 只讀數據段

__start:? 默認標號入口

匯編也可以寫函數

常用的匯編指令:

MOV指令:把一個寄存器拷貝到另一個寄存器中,或者將一個立即數傳遞到寄存器中,后面傳遞到前面。

MVO RO,R1

MRS指令:用于將特殊寄存器如CPSR,傳遞到普通的寄存器中,MRS R0,CPSR

MSR指令:用于將普通寄存器傳遞到特殊寄存器中,MSR CPSR, R0

BX是返回指令

存儲器訪問指令:LDR 指令,從存儲器加載數據到Rx中,LDR也可以把立即數加載到Rx中,LDR加載立即數的時候要用 = 不是 #?

常用的就是讀取CPU的寄存器值? LDR R0, = 0X0209C004? ? LDR R1, [R0]

STR 指令,就是將數據寫入存儲器中,比如LDR R0, 0X0209C004? LDR R1, = 0X20000002

STR R1, [R0]? 把R1的值寫入到R0所保存的地址中

壓棧和出棧指令:

PUSH {R0~R3, R12} @將 R0~R3 和 R12 壓棧
PUSH {LR}
?

出棧順序

POP {LR}
POP {R0~R3,R12}
?

跳轉指令:

如B,BL,BX,BLX等

直接向PC寄存器寫入數據

算數運算命令:

邏輯運算命令:

熟悉數據手冊和寄存器

1、先看原理圖找到對應使用的GPIO以及功能,然后手冊中在IOMUXC_SW_MUX_XX中先找到當前引腳,比如GPIO1_IO3,這個是他的復用寄存器,然后找到地址20E_0068h,寄存器表可以看出只有低5位有效,復用為普通的gpio的話就配置成0101,也就是0x05,(如果想配置成其他IIC或者USB功能配成其他數字)。/

2、然后要使能時鐘,找到時鐘標題,CCM,找到CCGR0-CCGR6,一般都是要全部使能就行,找到這7個寄存器組的地址,然后分別使能為0xFFFFFFFF。

比如地址是20C_4068h? ?通過STR 寫入0xFFFFFFFF,其他6個寄存器也一樣

3、然后是電氣寄存器,在手冊中找IOMUXC_SW_PAD_XX,由低位到高位依次是:

SRE:壓擺率? ? 默認為低,當需要高速IO時候,置1

DSE:設置IO的驅動能力? ?0表示輸出驅動關閉,為1看手冊,分母越大驅動能力越強

SPEED:設置IO速度,00 50M? 01 100M? 11 200M

ODE:開路輸出? ? 0關閉開漏,? 1打開開漏

PKE,上下拉保持? ? ? 0? 上拉保持? ? 1關閉上下拉

PUE設置狀態保持, 0 保持? 1上啦

PUS設置上下拉電阻, 00 100K? ? 11 22K

HYS:用不到,使能遲滯比較器

4、這幾個寄存器都找到之后,記錄地址,后面寫匯編初始化要用,然后就是配置GPIO功能,

找到Purpose Input/Output (GPIO)? GPIO的寄存器組? 看標題? 找到GPIO data register

注意:GPIO只是IO眾多復用的一個小配置,當你選擇把IO配置成GPIO后還需要,另外配置GPIO的一些功能,DR、 GDIR、 PSR、 ICR1、 ICR2、 EDGE_SEL、 IMR 和 ISR這八種寄存器

其中,一共5組,這里用GPIO1? 設置GPIO1_DR

數據寄存器DR??比如要設置 GPIO1_IO00 輸出高電平,那么就應該設置 GPIO1.DR=1

如果是輸入,那么就是讀取電平狀態

GDIR:設置IO的輸入還是輸出? 輸入0? 輸出1

PSR:功能和輸入狀態下的 DR 寄存器一樣

ICR1和ICR2這兩個寄存器,都是中斷控制寄存器, ICR1用于配置低16個GPIO, ICR2 用于配置高 16 個 GPIO

IMR用來控制GPIO的中斷禁止和使能,使能1,禁止0

ISR:中斷狀態寄存器,只要某個GPIO中斷發生,ISR相應位就是1,處理完中斷要清楚

EDGE_SEL 寄存器,這是邊沿選擇寄存器,會覆蓋ICR1和ICR2,無論設置多少都是雙邊沿觸發

這里控制LED,只需要設置DR和GDIR就行了。

LED實驗:引腳是IO3 GPIO1

對于Linux也就是cortex-A系列的開發,基本都要先寫匯編代碼,初始化外設部分

部分需要匯編初始化DDR,然后把指針SP指向DDR。

?如何查看對應的引腳和寄存器配置,Linux的引腳和電氣屬性是單獨兩個寄存器

引腳看這幾位就行

開發步驟:(如上)

先寫匯編程序:示例如下

.global _start @LED IO  GPIO1—3
_start:@先初始化時鐘ldr r0, = 0x020c4068 @ccgr0ldr r1, = 0xffffffffstr r1, [r0] @數據寫入ldr r0, = 0x020c406C @CCM_CCGR1str r1, [r0]ldr r0, = 0x020c4070 @CCM_CCGR2str r1, [r0]ldr r0, = 0x020c4074 @CCM_CCGR3str r1, [r0]ldr r0, = 0x020c4078 @CCM_CCGR4str r1, [r0]ldr r0, = 0x020c407C @CCM_CCGR5str r1, [r0]ldr r0, = 0x020c4080 @CCM_CCGR6str r1, [r0]@配置復用寄存器屬性ldr r0, = 0x020E0068 ldr r1, = 0x05str r1, [r0]@配置電氣屬性 
/*bit0 壓擺率
bit5:3  110 R0/6 驅動能力
bit7:6  10 100M
bit11   0  關閉
bit12   1 時能 pull
bit13
bit15:14 00 100k 下拉
bit16*/ldr r0, = 0x020E02F4ldr r1, = 0x10b0str r1, [r0]@設置gpio功能
/*找到gpio的基地址
bit 0 就是 io0     bit1就是io1  bit2就是io2   bit3就是io3
gpio1_dr 209_C000
gpio1_gdir  209_C004
gpio1_psr  209_C008
*/ldr r0, = 0x0209C004 @設置GDIR為輸出ldr r1, = 0x8str r1, [r0]/*打開LED*/ldr r0, = 0x0209C000 @設置dr為輸出ldr r1, = 0x0str r1, [r0]loop:b loop

然后寫驅動編譯程序:

把.c.s文件變成.o文件,先把匯編 變成目標文件

arm-linux-gnueabihf-gcc -g -c led.s -o led.o

將所有的.o文件鏈接為elf格式的可執行文件,本實驗鏈接的起始地址是 0x87800000? ? ?(就是代碼運行的起始地址)可以指向內部的RAM也可以指向外部的DDR核心板中,

arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf

將elf文件轉為bin文件,在32中,是可以直接把flash中的代碼拷貝到RAM中運行的,cortex-A的不能直接拷貝,需要把bin文件拷貝到SD卡中,然后放到設備的flash中運行。

arm-linux-gnueabihf-objcopy -O binary -g -S led.elf ?led.bin

將elf文件轉為匯編,反匯編,這樣RAM就可以識別了,RAM只認那15個寄存器

程序燒錄部分

32可以直接把代碼燒錄到內部flash中,cortex沒有內部flash,需要借助SD卡,EMMC,NAND,NOR,SPI flash等方式啟動,

1.需要把SD卡掛載到虛擬機中

2. 把F:\百度網盤下載\資料2\【正點原子】阿爾法Linux開發板(A盤)-基礎資料\05、開發工具\02、Ubuntu下裸機燒寫軟件 路徑下的??imxdownload文件拷貝到 編譯文件夾中,給權限

然后執行命令格式? ls /dev/sd* -l? 查看硬盤路徑? ? 插拔確認SD卡路徑

如果發現U盤或SD卡始終連接不到虛擬機,可以試著修改.vmx文件的

執行操作后,會把bin文件生成為load.imx文件

撥碼開關設置為SD卡啟動,重啟,點亮LED

編寫makefile部分

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

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

相關文章

【萌筆趣棋】網頁五子棋項目測試報告

目錄 一.項目介紹 (一)項目簡介 (二)功能介紹 (三)頁面展示 1.注冊頁面 2.登錄頁面 3.游戲大廳頁面 4.游戲房間頁面(對戰) 二.功能測試 (一)出現的…

知識圖譜增強的大型語言模型編輯

https://arxiv.org/pdf/2402.13593 摘要 大型語言模型(LLM)是推進自然語言處理(NLP)任務的關鍵,但其效率受到不準確和過時知識的阻礙。模型編輯是解決這些挑戰的一個有前途的解決方案。然而,現有的編輯方法…

數據庫,Spring Boot,數據源

您是對的,我之前的回答解釋了Spring Boot在操作MySQL時不一定需要顯式配置指定的數據源類型,因為它有自動配置機制,但沒有直接點明在自動配置情況下“數據源是什么”。 在Spring Boot自動配置機制下,這個“數據源”指的是一個連接…

數據結構測試模擬題(3)

1、兩個有序鏈表序列的合并 #include<bits/stdc.h> using namespace std;struct node{int num;node* next; };// 創建鏈表 node* CreatList(){int x;node *head new node(); // 創建頭節點head->next NULL;node *tail head; // 尾指針初始指向頭節點while…

LabVIEW Val (Sgnl) 屬性

在 LabVIEW 事件驅動架構中&#xff0c;Val (Sgnl) 屬性&#xff08;Value (Signaling)&#xff09;是實現編程觸發與用戶交互行為一致性的關鍵技術。與普通 Value 屬性不同&#xff0c;Val (Sgnl) 在修改控件值的同時強制生成值改變事件&#xff0c;確保程序邏輯與 UI 交互保持…

04.MySQL數據類型詳解

MySQL數據類型詳解 文章目錄 MySQL數據類型數據類型分類數值類型 tinyint類型bit類型float類型decimal類型 字符串類型 char類型varchar類型char和varchar比較 時間日期類型enum和set類型數據類型選擇的進階技巧常見誤區與解決方案性能優化與最佳實踐 MySQL數據類型 數據類型…

Spring AI 之對話記憶(Chat Memory)

大型語言模型&#xff08;LLMs&#xff09;是無狀態的&#xff0c;這意味著它們不會保留關于之前交互的信息。當想在多次交互中保持上下文或狀態時&#xff0c;這可能會成為一個限制。為了解決這一問題&#xff0c;Spring AI 提供了對話記憶功能&#xff0c;允許你在與大型語言…

H?lder Statistical Pseudo Divergence Proper H?lder Divergence

目錄 Hlder Statistical Pseudo DivergenceProper Hlder Divergence Hlder Statistical Pseudo Divergence Hlder Statistical Pseudo Divergence是一種度量兩個概率分布 p p p 和 q q q差異的方法&#xff0c;它基于Hlder不等式。定義如下&#xff1a; D α H ( p : q ) 1 …

時序數據庫IoTDB基于云原生的創新與實踐

概述 Apache IoTDB 是一款獨立自研的物聯網時序數據庫&#xff0c;作為 Apache 基金會的頂級項目&#xff0c;它融合了產學研的優勢&#xff0c;擁有深厚的科研基底。IoTDB 采用了端邊云協同的架構&#xff0c;專為物聯網設計&#xff0c;致力于提供極致的性能。 數據模型 I…

git 如何解決分支合并沖突(VS code可視化解決+gitLab網頁解決)

1、定義&#xff1a;兩個分支修改了同一文件的同一行代碼&#xff0c;無法自動決定如何合并代碼&#xff0c;需要人工干預的情況。&#xff08;假設A提交了文件a,此時B在未拉取代碼的情況下&#xff0c;直接提交是會報錯的&#xff0c;此時需要拉取之后再提交才會成功&#xff…

系統架構設計師(一):計算機系統基礎知識

系統架構設計師&#xff08;一&#xff09;&#xff1a;計算機系統基礎知識 引言計算機系統概述計算機硬件處理器處理器指令集常見處理器 存儲器總線總線性能指標總線分類按照總線在計算機中所處的位置劃分按照連接方式分類按照功能分類 接口接口分類 計算機軟件文件系統文件類…

聊一聊接口測試中緩存處理策略

目錄 一、強制繞過緩存 添加時間戳參數 修改請求頭 二、主動清除緩存 清除本地緩存 清除服務端緩存&#xff08;需權限&#xff09; 清除CDN緩存 三、測試緩存邏輯 首次請求獲取數據 記錄響應頭中的緩存標識????? 驗證緩存生效 測試緩存過期??????? 四…

機器學習算法-邏輯回歸

今天我們用 「預測考試是否及格」 的例子來講解邏輯回歸&#xff0c;從原理到實現一步步拆解&#xff0c;保證零基礎也能懂&#xff01; &#x1f3af; 例子背景 假設你是班主任&#xff0c;要根據學生的「學習時間」預測「是否及格」&#xff0c;手上有以下數據&#xff1a;…

【論文解讀】CVPR2023 PoseFormerV2:3D人體姿態估計(附論文地址)

論文鏈接&#xff1a;https://arxiv.org/pdf/2303.17472 源碼鏈接&#xff1a;https://github.com/QitaoZhao/PoseFormerV2 Abstract 本文提出了 PoseFormerV2&#xff0c;通過探索頻率域來提高 3D 人體姿態估計的效率和魯棒性。PoseFormerV2 利用離散余弦變換&#xff08;DC…

DRW - 加密市場預測

1.數據集描述 在本次比賽中&#xff0c;數據集包含加密市場的分鐘級歷史數據。您的挑戰是預測未來的加密貨幣市場價格走勢。這是一項kaggle社區預測競賽&#xff0c;您可以以 CSV 文件的形式或通過 Kaggle Notebooks 提交您的預測。有關使用 Kaggle Notebooks 的更多詳細信息&a…

嵌入式Linux系統中的啟動分區架構

在嵌入式Linux系統架構中,Linux內核、設備樹(Device Tree)與引導配置文件構成了系統啟動的基礎核心。如何安全、高效地管理這些關鍵文件,直接影響到系統的穩定性與可維護性。近年來,越來越多的嵌入式Linux開發者選擇將啟動相關文件從傳統的“混合存放”方式,轉向采用獨立…

用戶資產化視角下開源AI智能名片鏈動2+1模式S2B2C商城小程序的應用研究

摘要&#xff1a;在數字化時代&#xff0c;平臺流量用戶尚未完全轉化為企業的數字資產&#xff0c;唯有將其沉淀至私域流量池并實現可控、隨時觸達&#xff0c;方能成為企業重要的數字資產。本文從用戶資產化視角出發&#xff0c;探討開源AI智能名片鏈動21模式S2B2C商城小程序在…

Spring是如何實現屬性占位符解析

Spring屬性占位符解析 核心實現思路1?? 定義占位符處理器類2?? 處理 BeanDefinition 中的屬性3?? 替換具體的占位符4?? 加載配置文件5?? Getter / Setter 方法 源碼見&#xff1a;mini-spring 在使用 Spring 框架開發過程中&#xff0c;為了實現配置的靈活性&#xf…

【大模型面試每日一題】Day 31:LoRA微調方法中低秩矩陣的秩r如何選取?

【大模型面試每日一題】Day 31&#xff1a;LoRA微調方法中低秩矩陣的秩r如何選取&#xff1f; &#x1f4cc; 題目重現 &#x1f31f;&#x1f31f; 面試官:LoRA微調方法中低秩矩陣的秩r如何選取&#xff1f;&#xff1a; #mermaid-svg-g5hxSxV8epzWyP98 {font-family:"…

字節golang后端二面

前端接口使用restful格式&#xff0c;post與get的區別是什么&#xff1f; HTTP網絡返回的狀態碼有哪些&#xff1f; go語言切片與數組的區別是什么&#xff1f; MySQL實現并發安全避免兩個事務同時對一個記錄寫操作的手段有哪些&#xff1f; 如何實現業務的冪等性&#xff08;在…