国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

嵌入式Linux驅(qū)動開發(fā)系列五:Linux系統(tǒng)和HelloWorld

這篇具有很好參考價值的文章主要介紹了嵌入式Linux驅(qū)動開發(fā)系列五:Linux系統(tǒng)和HelloWorld。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

三個問題

了解Hello World程序的執(zhí)行過程有什么用?

編譯和執(zhí)行:Hello World程序的執(zhí)行分為兩個主要步驟:編譯和執(zhí)行。編譯器將源代碼轉(zhuǎn)換為可執(zhí)行文件,然后計算機(jī)執(zhí)行該文件并輸出相應(yīng)的結(jié)果。了解這個過程可以幫助我們理解如何將代碼轉(zhuǎn)化為可運(yùn)行的程序。

語法和語義:Hello World程序是一個簡單的示例,它包含一些基本的語法和語義規(guī)則。通過學(xué)習(xí)Hello World程序的執(zhí)行過程,我們可以了解如何正確使用編程語言的關(guān)鍵字、標(biāo)識符、語句和表達(dá)式,以及它們在程序中的作用。

調(diào)試和錯誤處理:當(dāng)我們編寫代碼時,經(jīng)常會出現(xiàn)錯誤。了解Hello World程序的執(zhí)行過程可以幫助我們更好地理解和調(diào)試代碼中的錯誤。我們可以學(xué)習(xí)如何查找和修復(fù)常見的語法錯誤和邏輯錯誤,并提高代碼的質(zhì)量和可靠性。

程序輸出和交互:Hello World程序的執(zhí)行結(jié)果通常是在終端或命令行中輸出一段文本。這可以幫助我們理解程序如何與用戶進(jìn)行交互,并將結(jié)果展示給用戶。了解這個過程對于開發(fā)復(fù)雜的應(yīng)用程序和用戶界面是很重要的。

裸機(jī)開發(fā)中的HelloWorld程序是怎么執(zhí)行的?

嵌入式Linux驅(qū)動開發(fā)系列五:Linux系統(tǒng)和HelloWorld,linux,運(yùn)維,服務(wù)器

第一步;進(jìn)行源代碼的編寫,其中關(guān)鍵的點(diǎn)在于printf函數(shù)的實現(xiàn),它需要依賴單片機(jī)的串口驅(qū)動程序。

第二步: 借助一些集成開發(fā)環(huán)境進(jìn)行程序的編譯。一鍵編譯,無需學(xué)習(xí)編譯鏈接相關(guān)知識。

第三步: 借助燒錄工具燒錄到具體芯片上。一鍵燒錄,無需學(xué)習(xí)芯片的flash和各種各樣啟動方式。

第四步: 上電啟動開發(fā)板,串口輸出“Hello World”字符串。

Linux系統(tǒng)下的Hello World程序是怎么執(zhí)行的?

嵌入式Linux驅(qū)動開發(fā)系列五:Linux系統(tǒng)和HelloWorld,linux,運(yùn)維,服務(wù)器

嵌入式Linux驅(qū)動開發(fā)系列五:Linux系統(tǒng)和HelloWorld,linux,運(yùn)維,服務(wù)器

四個案例

gcc預(yù)處理c文件

COLLECT_GCC_OPTIONS='-E' '-o' 'hello.i' '-v' '-mtune=generic' '-march=x86-64' /usr/lib/gcc/x86_64-linux-gnu/5/cc1 -E -quiet -v -imultiarch x86_64-linux-gnu hello.c -o hello.i -mtune=generic -march=x86-64 -fstack-protector-strong -Wformat -Wformat-security

這是一個gcc編譯器的命令行選項示例。它的作用是將C源文件hello.c預(yù)處理為hello.i文件。下面是每個選項的解釋:

  1. -E: 表示只進(jìn)行預(yù)處理,不進(jìn)行編譯和鏈接操作。
  2. -o hello.i: 指定預(yù)處理輸出的文件名為hello.i。
  3. -v: 詳細(xì)輸出編譯器執(zhí)行的信息。
  4. -mtune=generic: 指定編譯時針對通用處理器進(jìn)行優(yōu)化。
  5. -march=x86-64: 指定生成適用于x86-64架構(gòu)的代碼。
  6. -fstack-protector-strong: 生成強(qiáng)制堆棧保護(hù)的代碼,以防止緩沖區(qū)溢出漏洞。
  7. -Wformat -Wformat-security: 開啟有關(guān)格式化字符串的警告。
gcc編譯c文件

gec@ubuntu:~/hello$ sudo gcc -S?hello.i -o hello.s -v

COLLECT_GCC_OPTIONS='-s' '-o' 'hello.s' '-v' '-mtune=generic' '-march=x86-64'
?/usr/lib/gcc/x86_64-linux-gnu/5/cc1 -fpreprocessed hello.i -quiet -dumpbase hello.i -mtune=generic -march=x86-64 -auxbase hello -version -fstack-protector-strong -Wformat -Wformat-security -o /tmp/cc88JZ4W.s

這是gcc編譯器的另一個命令行選項示例。它的作用是將預(yù)處理過的文件hello.i進(jìn)行進(jìn)一步編譯,生成匯編語言文件hello.s。下面是每個選項的解釋:

  1. -s: 生成匯編語言文件。
  2. -o hello.s: 指定匯編語言輸出文件名為hello.s。
  3. -v: 詳細(xì)輸出編譯器執(zhí)行的信息。
  4. -mtune=generic: 指定編譯時針對通用處理器進(jìn)行優(yōu)化。
  5. -march=x86-64: 指定生成適用于x86-64架構(gòu)的代碼。
  6. -fpreprocessed hello.i: 指定預(yù)處理過的文件hello.i作為輸入文件。
  7. -dumpbase hello.i: 指定基礎(chǔ)輸入文件為hello.i。
  8. -auxbase hello: 指定輔助的基本文件名為hello。
  9. -version: 打印版本信息。
  10. -fstack-protector-strong: 生成強(qiáng)制堆棧保護(hù)的代碼,以防止緩沖區(qū)溢出漏洞。
  11. -Wformat -Wformat-security: 開啟有關(guān)格式化字符串的警告。
  12. -o /tmp/cc88JZ4W.s: 指定匯編語言輸出文件的路徑為/tmp/cc88JZ4W.s。
gcc編譯匯編

sudo gcc -c hello.s -o hello.o -v

gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12)?
COLLECT_GCC_OPTIONS='-c' '-o' 'hello.o' '-v' '-mtune=generic' '-march=x86-64'
?as -v --64 -o hello.o hello.s

as -v --64 -o hello.o hello.s

gcc在把匯編文件編譯為重定位文件時,使用的是as這個應(yīng)用程序
?

gcc鏈接可重定位文件

ld連接器

collect2封裝了ld連接器

COLLECT_GCC_OPTIONS='-o' 'hello' '-v' '-mtune=generic' '-march=x86-64'
?/usr/lib/gcc/x86_64-linux-gnu/5/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper -plugin-opt=-fresolution=/tmp/cc9OI5DQ.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o hello /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/5/../../.. hello.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-linux-gnu/5/crtend.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o

(封裝了ld程序)

靜態(tài)鏈接

COLLECT_GCC_OPTIONS='-o' 'hello_static' '-v' '-static' '-mtune=generic' '-march=x86-64'
?/usr/lib/gcc/x86_64-linux-gnu/5/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper -plugin-opt=-fresolution=/tmp/ccqTGMxr.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lc --sysroot=/ --build-id -m elf_x86_64 --hash-style=gnu --as-needed -static -z relro -o hello_static /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/5/crtbeginT.o -L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/5/../../.. hello.o --start-group -lgcc -lgcc_eh -lc --end-group /usr/lib/gcc/x86_64-linux-gnu/5/crtend.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o

輸入ls -lh 可以看到動態(tài)編譯和靜態(tài)編譯的兩個文件大小區(qū)別

嵌入式Linux驅(qū)動開發(fā)系列五:Linux系統(tǒng)和HelloWorld,linux,運(yùn)維,服務(wù)器

?文章來源地址http://www.zghlxwxcb.cn/news/detail-643254.html

到了這里,關(guān)于嵌入式Linux驅(qū)動開發(fā)系列五:Linux系統(tǒng)和HelloWorld的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 正點(diǎn)原子嵌入式linux驅(qū)動開發(fā)——Linux WIFI驅(qū)動

    正點(diǎn)原子嵌入式linux驅(qū)動開發(fā)——Linux WIFI驅(qū)動

    WIFI的使用已經(jīng)很常見了,手機(jī)、平板、汽車等等,雖然可以使用有線網(wǎng)絡(luò),但是有時候很多設(shè)備存在布線困難的情況,此時WIFI就是一個不錯的選擇。 正點(diǎn)原子STM32MP1開發(fā)板支持USB和SDIO這兩種接口的WIFI ,本章就來學(xué)習(xí)一下如何在STM32MP1開發(fā)板上使用USB和SDIO這兩種WIFI。 正點(diǎn)原

    2024年02月05日
    瀏覽(29)
  • 正點(diǎn)原子嵌入式linux驅(qū)動開發(fā)——Linux CAN驅(qū)動

    正點(diǎn)原子嵌入式linux驅(qū)動開發(fā)——Linux CAN驅(qū)動

    CAN是目前應(yīng)用非常廣泛的現(xiàn)場總線之一,主要應(yīng)用于汽車電子和工業(yè)領(lǐng)域 ,尤其是汽車領(lǐng)域,汽車上大量的傳感器與模塊都是通過CAN總線連接起來的。CAN總線目前是自動化領(lǐng)域發(fā)展的熱點(diǎn)技術(shù)之一,由于其高可靠性,CAN總線目前廣泛的應(yīng)用于工業(yè)自動化、船舶、汽車、醫(yī)療和

    2024年02月06日
    瀏覽(39)
  • 嵌入式Linux驅(qū)動開發(fā)——常見框架梳理

    嵌入式Linux驅(qū)動開發(fā)——常見框架梳理

    本文主要介紹了Linux驅(qū)動開發(fā)中一些常用的驅(qū)動框架,platform、input、iic、spi等,硬件平臺使用的是正點(diǎn)原子的imx6ull開發(fā)板。 不管什么框架最后都是要追溯到配置IO的電氣屬性和復(fù)用功能 如果要使用外部中斷,設(shè)備樹節(jié)點(diǎn)中還需添加相關(guān)信息,什么邊沿觸發(fā) 1:module_init和mod

    2024年02月15日
    瀏覽(32)
  • 嵌入式Linux驅(qū)動開發(fā) 04:基于設(shè)備樹的驅(qū)動開發(fā)

    嵌入式Linux驅(qū)動開發(fā) 04:基于設(shè)備樹的驅(qū)動開發(fā)

    前面文章 《嵌入式Linux驅(qū)動開發(fā) 03:平臺(platform)總線驅(qū)動模型》 引入了資源和驅(qū)動分離的概念,這篇文章將在前面基礎(chǔ)上更進(jìn)一步,引入設(shè)備樹的概念。 在平臺總線驅(qū)動模型中資源和驅(qū)動已經(jīng)從邏輯上和代碼組織上進(jìn)行了分離,但每次調(diào)整資源還是會涉及到內(nèi)核,所以現(xiàn)

    2024年02月16日
    瀏覽(27)
  • 正點(diǎn)原子嵌入式linux驅(qū)動開發(fā)——Linux 網(wǎng)絡(luò)設(shè)備驅(qū)動

    正點(diǎn)原子嵌入式linux驅(qū)動開發(fā)——Linux 網(wǎng)絡(luò)設(shè)備驅(qū)動

    網(wǎng)絡(luò)驅(qū)動是linux里面驅(qū)動三巨頭之一 ,linux下的網(wǎng)絡(luò)功能非常強(qiáng)大,嵌入式linux中也常常用到網(wǎng)絡(luò)功能。前面已經(jīng)講過了字符設(shè)備驅(qū)動和塊設(shè)備驅(qū)動,本章就來學(xué)習(xí)一下linux里面的 網(wǎng)絡(luò)設(shè)備驅(qū)動 。 本次筆記中討論的都是有線網(wǎng)絡(luò)! 提起網(wǎng)絡(luò),一般想到的硬件就是“網(wǎng)卡”。在

    2024年01月17日
    瀏覽(25)
  • 【嵌入式Linux驅(qū)動】驅(qū)動開發(fā)調(diào)試相關(guān)的關(guān)系記錄

    【嵌入式Linux驅(qū)動】驅(qū)動開發(fā)調(diào)試相關(guān)的關(guān)系記錄

    https://www.processon.com/mindmap/64537772b546c76a2f37bd2f

    2024年02月02日
    瀏覽(27)
  • 嵌入式Linux驅(qū)動開發(fā)(LCD屏幕專題)(一)

    嵌入式Linux驅(qū)動開發(fā)(LCD屏幕專題)(一)

    總的分辨率是 yres*xres。 以下三種方式表示顏色 每個屏幕都有一個內(nèi)存(framebuffer)如下圖,內(nèi)存中每塊數(shù)據(jù)對用屏幕上的一個像素點(diǎn),設(shè)置好LCD后,只需把顏色數(shù)據(jù)寫入framebuffer即可。 Framebuffer驅(qū)動屬于字符設(shè)備驅(qū)動,我們先說字符設(shè)備驅(qū)動框架如下圖: 驅(qū)動主設(shè)備號 構(gòu)造

    2024年02月09日
    瀏覽(30)
  • 嵌入式Linux驅(qū)動開發(fā)(LCD屏幕專題)(三)

    嵌入式Linux驅(qū)動開發(fā)(LCD屏幕專題)(三)

    1. 硬件相關(guān)的操作 LCD驅(qū)動程序的核心就是: 分配fb_info 設(shè)置fb_info 注冊fb_info 硬件相關(guān)的設(shè)置 硬件相關(guān)的設(shè)置又可以分為3部分: 引腳設(shè)置 時鐘設(shè)置 LCD控制器設(shè)置 2. 在設(shè)備樹里指定LCD參數(shù) 3. 編程 3.1 從設(shè)備樹獲得參數(shù) 時序參數(shù)、引腳極性等信息,都被保存在一個display_timi

    2024年02月09日
    瀏覽(33)
  • 嵌入式linux驅(qū)動開發(fā)篇之設(shè)備樹

    嵌入式linux驅(qū)動開發(fā)篇之設(shè)備樹

    設(shè)備樹(Device Tree)是一種用于描述嵌入式系統(tǒng)硬件組件及其連接關(guān)系的數(shù)據(jù)結(jié)構(gòu)。它被廣泛用于嵌入式 Linux 系統(tǒng),尤其是針對使用多種不同架構(gòu)和平臺的嵌入式系統(tǒng)。它是一種與硬件描述相關(guān)的中間表示形式,將硬件信息抽象成一種可移植的格式,使得操作系統(tǒng)和引導(dǎo)加載

    2024年02月22日
    瀏覽(25)
  • 嵌入式Linux驅(qū)動開發(fā) 02:將驅(qū)動程序添加到內(nèi)核中

    嵌入式Linux驅(qū)動開發(fā) 02:將驅(qū)動程序添加到內(nèi)核中

    在上一篇文章 《嵌入式Linux驅(qū)動開發(fā) 01:基礎(chǔ)開發(fā)與使用》 中我們已經(jīng)實現(xiàn)了最基礎(chǔ)的驅(qū)動功能。在那篇文章中我們的驅(qū)動代碼是獨(dú)立于內(nèi)核代碼存放的,并且我們的驅(qū)動編譯后也是一個獨(dú)立的模塊。在實際使用中將驅(qū)動代碼放在內(nèi)核代碼中,并將驅(qū)動編譯到內(nèi)核中也是比較

    2023年04月09日
    瀏覽(51)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包