偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

[[344608]]

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

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

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

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

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

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

對于為何選擇樹莓派 3,作者給出了解釋:首先,它既便宜又容易買到。第二,它是 64 位的,擁有非常大的地址空間。第三,它只使用 MMIO,這使得編程更容易。

該教程使用 C 語言進(jìn)行開發(fā),因為 C 語言能夠直接對硬件進(jìn)行開發(fā)。

預(yù)備知識

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

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

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

[[344609]]

Micro-SD 卡 USB 適配器。

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

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

[[344610]]

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

仿真

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

或者:

-M raspi3:讓 qemu 仿真樹莓派 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 重定向到運行 qemu 的終端的標(biāo)準(zhǔn)輸入 / 輸出,以便顯示發(fā)送到串行線路的所有內(nèi)容,并且 vm 會接收終端中鍵入的每個鍵。該操作僅適用于教程 05 及更高版本,因為默認(rèn)情況下不會重定向 UART1。為此,必須添加一些類似于 - chardev socket,host=localhost,port=1111,id=aux -serial chardev:aux 的參數(shù),或者簡單地使用兩個 -serial 參數(shù)。

硬件資源

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

VideoCore GPU;

ARM-Cortex-A53 CPU (ARMv8);

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

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

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

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

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

一些更有趣的 MMIO 地址是:

更多信息,請參見:https://github.com/raspberrypi

 

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

2010-06-18 09:00:54

2014-02-13 10:15:39

編程業(yè)余愛好

2011-02-15 13:35:45

Qt開發(fā)者

2010-05-11 10:08:00

2017-11-01 15:20:55

開源開源許可證

2013-12-26 10:32:30

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

2018-06-12 07:38:05

Linux 開源

2009-11-02 11:25:40

LinuxUbuntu 9.10操作系統(tǒng)

2019-08-09 10:15:14

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

2009-02-27 09:59:07

LinuxFedora 10愛好者

2011-05-30 13:58:56

PHP

2017-03-23 15:17:20

Linuxsudo棋盤

2020-06-05 09:47:55

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

2011-05-11 09:42:27

程序員

2021-01-12 10:50:48

人工智能Instagramer科技

2021-01-01 09:03:44

故障HAProxy服務(wù)器

2011-08-29 17:56:18

Paper Camer拍照應(yīng)用

2014-04-01 09:48:09

Linux高清壁紙

2021-01-10 15:31:05

Mac終端Linux

2011-01-05 09:36:19

VirtualBSD
點贊
收藏

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