自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

OS開(kāi)發(fā)愛(ài)好者福利:樹(shù)莓派上編譯C語(yǔ)言,順便掌握一波硬件知識(shí)

新聞 前端
樹(shù)莓派雖小,小到僅有信用卡大小,但功能卻和普通電腦無(wú)異,可以將其連接電視、顯示器、鍵盤(pán)鼠標(biāo)等設(shè)備使用。

 樹(shù)莓派雖小,小到僅有信用卡大小,但功能卻和普通電腦無(wú)異,可以將其連接電視、顯示器、鍵盤(pán)鼠標(biāo)等設(shè)備使用。也可以處理文字、電子表格、媒體甚至是游戲。那么這個(gè)神奇的小電腦,怎樣用它來(lái)進(jìn)行編程呢?下面介紹一篇利用樹(shù)莓派進(jìn)行裸機(jī)編程的教程,順便學(xué)習(xí)一下接口、硬件等知識(shí)。

[[344608]]

近日,有人在 GitHub 上開(kāi)源了一個(gè)關(guān)于樹(shù)莓派的教程。不同于以往的樹(shù)莓派開(kāi)發(fā),這篇教程的核心內(nèi)容是討論如何在樹(shù)莓派上進(jìn)行裸機(jī)編程。

OS開(kāi)發(fā)愛(ài)好者福利:樹(shù)莓派上編譯C語(yǔ)言,順便掌握一波硬件知識(shí)

教程地址:https://github.com/bztsrc/raspi3-tutorial

在樹(shù)莓派 3 上進(jìn)行裸機(jī)編程

該系列教程面向那些想要編譯自己的樹(shù)莓派裸機(jī)應(yīng)用程序的人,具體目標(biāo)受眾是那些對(duì)樹(shù)莓派硬件不熟悉,但在業(yè)余時(shí)間又愛(ài)好 OS 的開(kāi)發(fā)人員。在這篇教程里,作者給出了一些示例來(lái)完成基本的操作,比如:將代碼寫(xiě)入串行控制臺(tái)、從串行控制臺(tái)中讀取按鍵、設(shè)置屏幕分辨率并繪制到線性幀緩沖區(qū)。此外,作者還展示了如何獲取硬件的序列號(hào)、硬件支持的隨機(jī)數(shù),以及如何從啟動(dòng)分區(qū)讀取文件。

需要注意的是:這篇教程沒(méi)有涉及編寫(xiě) OS。諸如內(nèi)存管理、虛擬文件系統(tǒng)、實(shí)現(xiàn)多任務(wù)處理之類(lèi)的主題也不會(huì)介紹。該教程將重點(diǎn)介紹與硬件的接口,而不是關(guān)于 OS 的理論。此外,該教程假設(shè)你具有一定的 GNU/Linux 知識(shí),對(duì)編譯程序、創(chuàng)建磁盤(pán)和文件系統(tǒng)鏡像有一定的了解。

對(duì)于為何選擇樹(shù)莓派 3,作者給出了解釋?zhuān)菏紫龋?strong>它既便宜又容易買(mǎi)到。第二,它是 64 位的,擁有非常大的地址空間。第三,它只使用 MMIO,這使得編程更容易。

該教程使用 C 語(yǔ)言進(jìn)行開(kāi)發(fā),因?yàn)?C 語(yǔ)言能夠直接對(duì)硬件進(jìn)行開(kāi)發(fā)。

預(yù)備知識(shí)

在開(kāi)始前,你將需要在 FAT 文件系統(tǒng)上使用交叉編譯器(有關(guān)詳細(xì)信息,請(qǐng)參見(jiàn) 00_crosscompiler 目錄)和帶有固件文件的 Micro SD 卡。

每個(gè)目錄都有一個(gè) Makefile.gcc 以及 Makefile.clang。確保 Makefile 符號(hào)鏈接根據(jù)你自己選擇的交叉編譯器指向版本。

作者給出的建議是買(mǎi)一個(gè) Micro SD 卡 USB 適配器(許多制造商都會(huì)提供這種適配器的 SD 卡),這樣就可以像 USB 一樣將該卡連接到任何臺(tái)式計(jì)算機(jī)上,而不需要特殊的讀卡器接口(盡管現(xiàn)在很多筆記本電腦都有這種接口)。如果你不喜歡 dd 命令,你也可以選擇 USBImager,這是一個(gè)簡(jiǎn)單的 GUI 應(yīng)用程序,具有可移植的可執(zhí)行文件,可用于 Windows、MacOSX 和 Linux 操作系統(tǒng)。

[[344609]]

Micro-SD 卡 USB 適配器。

在帶有 LBA FAT32(類(lèi)型 0x0C)分區(qū)的 SD 卡上創(chuàng)建 MBR 分區(qū)方案,并對(duì)其格式化,然后將 bootcode.bin、start.elf 以及 fixup.dat 復(fù)制到其中?;蛘撸憧梢韵螺d一個(gè) raspbian 鏡像,dd 命令燒寫(xiě)到 SD 卡,mount 掛載并刪除不必要的. img 文件。不管你喜歡哪種方法,重點(diǎn)是你將使用這些教程創(chuàng)建 kernel8.img,而且必須復(fù)制到 SD 卡的根目錄中,后者不應(yīng)該存在其他. img 文件。

建議使用 USB 串行調(diào)試電纜。把它連接到 GPIO 引腳 14/15,然后在電腦上按如下方式運(yùn)行 minicom:

[[344610]]

USB 串行調(diào)試電纜

仿真

不幸的是,官方的 qemu 二進(jìn)制文件還不支持樹(shù)莓派 3。但作者已經(jīng)實(shí)現(xiàn)了,并將很快發(fā)布(更新:在 qemu2.12 中提供)(https://wiki.qemu.org/ChangeLog/2.12#ARM)。在此之前,你必須從最新的源代碼編譯 qemu。編譯后,可進(jìn)行如下操作:

或者:

-M raspi3:讓 qemu 仿真樹(shù)莓派 3 硬件。

-kernel kernel8.img:告知要使用的內(nèi)核文件名。

-drive file=$(yourimagefile),if=sd,format=raw:在第二種情況下,該參數(shù)為 SD 卡鏡像,它也可以是標(biāo)準(zhǔn)的 rasbian 鏡像。

-serial stdio

-serial null -serial stdio:將模擬的 UART0 重定向到運(yùn)行 qemu 的終端的標(biāo)準(zhǔn)輸入 / 輸出,以便顯示發(fā)送到串行線路的所有內(nèi)容,并且 vm 會(huì)接收終端中鍵入的每個(gè)鍵。該操作僅適用于教程 05 及更高版本,因?yàn)槟J(rèn)情況下不會(huì)重定向 UART1。為此,必須添加一些類(lèi)似于 - chardev socket,host=localhost,port=1111,id=aux -serial chardev:aux 的參數(shù),或者簡(jiǎn)單地使用兩個(gè) -serial 參數(shù)。

硬件資源

下面簡(jiǎn)單介紹一下所需硬件資源,BCM2837 SoC 芯片。包括:

VideoCore GPU;

ARM-Cortex-A53 CPU (ARMv8);

MMIO 映射外部設(shè)備。

有趣的是,CPU 不是主板上的主處理器。當(dāng)它通電后,第一個(gè) GPU 運(yùn)行。當(dāng)初始化完成時(shí),通過(guò)執(zhí)行 bootcode.bin,它將加載并執(zhí)行 start.elf。這不是一個(gè) ARM 可執(zhí)行文件,而是專(zhuān)門(mén)為 GPU 編譯的。比較有意思的是,start.elf 尋找不同的 ARM 可執(zhí)行文件,都以 kernel 開(kāi)頭,以. img 結(jié)尾。由于要在 AArch64 模式下對(duì) CPU 進(jìn)行編程,因此只需要 kernel8.img,這也是最后一個(gè)要查找的。加載后,GPU 觸發(fā) ARM 處理器上的復(fù)位線,開(kāi)始在地址 0x80000(或更準(zhǔn)確地說(shuō)是 0)處執(zhí)行代碼。

RAM(1G Raspberry Pi3)在 CPU 和 GPU 之間共享,這意味著一個(gè)可以讀取另一個(gè)寫(xiě)入內(nèi)存的內(nèi)容。為了避免混淆,需要定義好 mailbox 接口。CPU 將消息寫(xiě)入 mailbox,并通知 GPU 讀取它。GPU(知道消息完全在內(nèi)存中)解釋它,并將響應(yīng)消息放在同一個(gè)地址。CPU 必須循環(huán)訪問(wèn)內(nèi)存以知道 GPU 何時(shí)完成,然后它才能讀取響應(yīng)。

相似的,所有外部設(shè)備都在內(nèi)存中與 CPU 通信。每個(gè)設(shè)備都有從 0x3F000000 開(kāi)始的專(zhuān)用內(nèi)存地址,但是它不在真實(shí)的 RAM 中(稱(chēng)為內(nèi)存映射 IO)。現(xiàn)在沒(méi)有用于外圍設(shè)備的 mailbox,而是每個(gè)設(shè)備都有其自己的協(xié)議。這些設(shè)備的共同點(diǎn)是:必須以 32 位為單位在 4 個(gè)字節(jié)對(duì)齊的地址(所謂的字)上讀取和寫(xiě)入其內(nèi)存,并且每個(gè)設(shè)備都有控制 / 狀態(tài)和數(shù)據(jù)字(data words)。不幸的是,Broadcom(SoC 芯片的制造商)在記錄產(chǎn)品方面很差?,F(xiàn)在所擁有的最好的是 BCM2835 文檔,這個(gè)文檔就足夠了。

CPU 中還有一個(gè)內(nèi)存管理單元,允許創(chuàng)建虛擬地址空間。這可以通過(guò)特定的 CPU 寄存器進(jìn)行編程,并且在將這些 MMIO 地址映射到虛擬地址空間時(shí)必須小心。

一些更有趣的 MMIO 地址是:

更多信息,請(qǐng)參見(jiàn):https://github.com/raspberrypi

 

責(zé)任編輯:張燕妮 來(lái)源: 機(jī)器之心Pro
相關(guān)推薦

2010-06-18 09:00:54

2014-02-13 10:15:39

編程業(yè)余愛(ài)好

2011-02-15 13:35:45

Qt開(kāi)發(fā)者

2017-11-01 15:20:55

開(kāi)源開(kāi)源許可證

2010-05-11 10:08:00

2009-02-27 09:59:07

LinuxFedora 10愛(ài)好者

2011-05-30 13:58:56

PHP

2017-03-23 15:17:20

Linuxsudo棋盤(pán)

2009-11-02 11:25:40

LinuxUbuntu 9.10操作系統(tǒng)

2013-12-26 10:32:30

編程學(xué)習(xí)

2018-06-12 07:38:05

Linux 開(kāi)源書(shū)

2019-08-09 10:15:14

機(jī)器學(xué)習(xí)人工智能監(jiān)督學(xué)習(xí)

2020-06-05 09:47:55

Linux 系統(tǒng) 數(shù)據(jù)

2021-01-12 10:50:48

人工智能Instagramer科技

2011-05-11 09:42:27

程序員

2011-01-05 09:36:19

VirtualBSD

2021-01-01 09:03:44

故障HAProxy服務(wù)器

2011-08-29 17:56:18

Paper Camer拍照應(yīng)用

2021-01-10 15:31:05

Mac終端Linux

2014-04-01 09:48:09

Linux高清壁紙
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)