嵌入式 Linux入 門(mén)第一課,嵌入式 linux 基礎(chǔ)說(shuō)明以及 Linux 文件結(jié)構(gòu)。
前言
學(xué)習(xí)嵌入式 Linux,首先我們得知道什么是Linux,什么是嵌入式Linux,有一些基本概念就先得先了解。
基本的說(shuō)明介紹完,我們第一篇先來(lái)了解一下 Linux 的文件結(jié)構(gòu)。
本文就簡(jiǎn)單的說(shuō)明一些必要的基本概念,以及介紹一下 Linux 的文件結(jié)構(gòu)。但是呢,既然是自己寫(xiě)博文,除非專有名詞會(huì)借用權(quán)威出處,并不想生搬硬套的說(shuō)明,我會(huì)盡量用白話的方式給予說(shuō)明。
說(shuō)明,博主的參考資料會(huì)有韋東山,野火,正點(diǎn)原子,菜鳥(niǎo)教程, 及網(wǎng)上各種有關(guān)的資料,基他們的資料我都有看,然后根據(jù)自己的學(xué)習(xí)理解,把覺(jué)得好的需要掌握的東西都會(huì)記錄下來(lái)。
我是矜辰所致,全網(wǎng)同名,盡量用心寫(xiě)好每一系列文章,不浮夸,不將就,認(rèn)真對(duì)待學(xué)知識(shí)的我們,矜辰所致,金石為開(kāi)!
一、嵌入式 Linux 基礎(chǔ)
第一章節(jié)來(lái)簡(jiǎn)單描述一些 嵌入式 Linux 相關(guān)的基礎(chǔ)知識(shí),主要是讓我們知道自己要面對(duì)的是什么,將來(lái)要做的事情大概是什么。有些基礎(chǔ)比如 Linux 發(fā)展歷史之類的與我們學(xué)習(xí)開(kāi)發(fā)并無(wú)關(guān)系, 感興趣的可自行上網(wǎng)查閱。
廢話不多說(shuō),開(kāi)整 !
1.1 Linux 簡(jiǎn)介
Linux,全稱GNU/Linux,是一套免費(fèi)使用和自由傳播的類Unix操作系統(tǒng),是一個(gè)基于POSIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。
Linux不僅系統(tǒng)性能穩(wěn)定,而且是開(kāi)源軟件。伴隨著互聯(lián)網(wǎng)的發(fā)展,Linux得到了來(lái)自全世界軟件愛(ài)好者、組織、公司的支持。它除了在服務(wù)器方面保持著強(qiáng)勁的發(fā)展勢(shì)頭以外,在個(gè)人電腦、嵌入式系統(tǒng)上都有著長(zhǎng)足的進(jìn)步。
簡(jiǎn)單一句話,Linux 是一個(gè)開(kāi)源的操作系統(tǒng)!
1.2 Linux 與 windows
對(duì)于操作系統(tǒng)而言,我們最熟悉的莫過(guò)于 Windows 操作系統(tǒng),Linux 如果不是相關(guān)人員一般都接觸不到。
對(duì)于我們熟悉的 Windows,我們知道電腦開(kāi)機(jī)啟動(dòng)的時(shí)候首先會(huì)進(jìn)入一個(gè)界面,一般很快就會(huì)跳過(guò),在那個(gè)界面出現(xiàn)我們可以通過(guò)鍵盤(pán)進(jìn)入一個(gè)設(shè)置界面:就是 BIOS(不搞計(jì)算機(jī)的可能這個(gè)地方都不明白)。 我們進(jìn)入 BIOS 的時(shí)候還與 Windows 系統(tǒng)無(wú)關(guān),通過(guò) BIOS 加載放在我們硬盤(pán)上面的 Windows 操作系統(tǒng)來(lái)啟動(dòng) windows,才進(jìn)入到大家都熟悉的windows界面,接下來(lái)就是通過(guò)熟悉的圖形化操作界面進(jìn)行各種操作和程序的運(yùn)行。
Linux作為一個(gè)操作系統(tǒng),其實(shí)本質(zhì)上這個(gè)流程是和 windows 一致的,這里韋東山老師的 Linux 教學(xué)資料里面有一張圖可以很好的說(shuō)明這種情況:
通過(guò)與我們熟悉的 Windows 操作系統(tǒng)做比較來(lái)說(shuō)明 Linux 的啟動(dòng)運(yùn)行,讓我們更直觀的體會(huì)到 Linux 也不過(guò)是一個(gè)操作系統(tǒng),也能從大體上知道我們要以后要面對(duì)的一些工作:u-boot,驅(qū)動(dòng)程序,內(nèi)核,APP等。
1.3 Linux 版本選擇
因?yàn)?Linux 是一個(gè)開(kāi)源的操作系統(tǒng),大家都可以進(jìn)行開(kāi)發(fā)使用,隨著各大社區(qū)家族不同的側(cè)重,如今有很多的版本:
具體版本區(qū)別說(shuō)明可查看文章:[這么多Linux版本,你究竟該怎么選擇?]
我們簡(jiǎn)單了解下一些主要的發(fā)行版本:
我們做嵌入式 Linux 開(kāi)發(fā),肯定需要在 Linux 環(huán)境下進(jìn)行。博主本系列的文章,會(huì)使用 Ubuntu 為開(kāi)發(fā)系統(tǒng)。
1.4 何為嵌入式Linux?
我們學(xué)習(xí)嵌入式 Linux, 說(shuō)直白點(diǎn)就是在微處理器上面跑 Linux 操作系統(tǒng)。
我們以前學(xué)習(xí)51單片機(jī),STM32,除了裸機(jī)程序,我們還能跑一些嵌入式 RTOS,比如FreeRTOS ,RT-Thread 等。
同樣的,如果條件允許,我們也能在 MCU 上跑 Linux。
這里需要說(shuō)明一定是需要條件允許,比如 STM32 就不能跑Linux。
1.5 STM32為什么不能跑 Linux?
首先我們應(yīng)該知道 STM32 是 Cortex-M系列,此系列的 MCU 并沒(méi)有 MMU(下面會(huì)說(shuō)明什么是MMU) !
操作系統(tǒng)從某種意義上可以分為2種:
- 需要MMU的: Linux 、Windows、MacOS
- 不需要MMU的:FreeRTOS,RT-Thread(新分支RT-Thread smart已經(jīng)支持,但是不帶MMU的也一直存在),ucOS。
** STM32 不帶 MMU,所以他無(wú)法運(yùn)行 Linux**!
在 Cortex 家族中,有更高端的 Cortex-A 系列的芯片大部分是帶MMU的。比如Cortex-A7,Cortex-A8等。
我們本專欄使用的開(kāi)發(fā)板芯片為為 i.MX6ULL,基于ARM Cortex-A7架構(gòu)的處理器。
1.6 什么是 MMU?
MMU是 Memory Management Unit 的縮寫(xiě)。
**針對(duì)各種CPU, MMU是個(gè)可選的配件. MMU負(fù)責(zé)的是虛擬地址與物理地址的轉(zhuǎn)換,提供硬件機(jī)制的內(nèi)存訪問(wèn)授權(quán)。
現(xiàn)在的多用戶多進(jìn)程操作系統(tǒng), 需要MMU, 才能達(dá)到每個(gè)用戶進(jìn)程都擁有自己的獨(dú)立的地址空間的目標(biāo)。**
使用MMU, OS劃分出一段地址區(qū)域, 在這塊地址區(qū)域中, 每個(gè)進(jìn)程看到的內(nèi)容都不一定一樣。
具體的 MMU 分分析理解, 大家可以自行搜索一下。
二、安裝環(huán)境說(shuō)明
在上面說(shuō)明 Linux 版本選擇的時(shí)候,從最后的截圖中可以看到,博主自己使用的開(kāi)發(fā)環(huán)境為虛擬機(jī)安裝 的 ubuntu 系統(tǒng)。
2.1 虛擬機(jī)軟件
安裝虛擬機(jī)需要專門(mén)的軟件,博主接觸過(guò)的虛擬機(jī)軟件其實(shí)也就兩款:VirtualBox 和 VMware Workstations。
VirtualBox:
VirtualBox 是德國(guó) Innotek 公司開(kāi)發(fā),由 Sun Microsystems 推出的一款使用非常廣泛的免費(fèi)開(kāi)源的虛擬機(jī)軟件。
VirtualBox 好處在于完全免費(fèi)開(kāi)源,在野火的 Linux 教程使用的就是 VirtualBox 安裝 Ubuntu 虛擬機(jī),如下圖:
VMware Workstations:
VMware Workstation(中文名“威睿工作站”)是一款功能強(qiáng)大的桌面虛擬計(jì)算機(jī)軟件,提供用戶可在單一的桌面上同時(shí)運(yùn)行不同的操作系統(tǒng),和進(jìn)行開(kāi)發(fā)、測(cè)試 、部署新的應(yīng)用程序的最佳解決方案。
功能比較強(qiáng)大,正點(diǎn)原子 和 韋東山老師 的教程用的是這款虛擬機(jī),博主自己其實(shí)也一直習(xí)慣使用VMware Workstations, 其實(shí)用什么無(wú)所謂,按照自己的習(xí)慣來(lái)就好,看哪個(gè)順眼就用哪個(gè)。
在現(xiàn)在的 Win10 系統(tǒng)中,還可以安裝桌面版本的 Ubuntu,可以直接在商店中找到,如下圖:
但是聽(tīng)說(shuō)這種桌面版本不適用于開(kāi)發(fā),具體的我自己以前安裝的時(shí)候也是各種問(wèn)題,最后還是失敗放棄了。
建議 VirtualBox 和 VMware Workstations 安裝虛擬機(jī)都可以,看自己的習(xí)慣和喜好。
2.2 環(huán)境安裝
本來(lái)需要說(shuō)明一下如何安裝的,但是因?yàn)樽约核须娔X上面都已經(jīng)安裝過(guò)了,而且使用了一段時(shí)間里面都有很多資料,所以不想破壞電腦上現(xiàn)在的環(huán)境,到時(shí)候換了電腦再來(lái)更新一篇手把手安裝說(shuō)明。
等我賺錢(qián)換個(gè)電腦 = =!
網(wǎng)上的參考資料也多,這個(gè)自己動(dòng)手安裝是必不可少的,也無(wú)法偷懶,必須得自己動(dòng)手操作,環(huán)境安裝雖然簡(jiǎn)單,但是安裝過(guò)的人都知道,經(jīng)常也會(huì)有莫名其妙的問(wèn)題,必須得自己遇坑填坑。
文章更新,環(huán)境安裝請(qǐng)參考的的環(huán)境篇博文(發(fā)燒友的小伙伴先等等,我也會(huì)在發(fā)燒友發(fā)表):
[嵌入式 Linux 入門(mén) 環(huán)境篇(二、安裝虛擬機(jī) — 體驗(yàn) Ubuntu 22.04)]
三、Linux文件結(jié)構(gòu)
好了介紹了那么多,今天作為第一篇我們需要了解的知識(shí)點(diǎn):
Linux 文件結(jié)構(gòu),東西不多但是需要了解!
我們使用 Windows 系統(tǒng),進(jìn)入系統(tǒng)以后我們可以看到分為 C 盤(pán),D 盤(pán),E盤(pán) 等不同的區(qū)間,每個(gè)區(qū)間都可以存放文件。
**Linux 系統(tǒng)里面所有的文件和目錄都是掛載在根目錄下面的:“/” 。
對(duì)于普通用戶,在Ubuntu下不再關(guān)心分區(qū)、盤(pán)符,需要關(guān)心的是哪個(gè)目錄存什么。
你可以簡(jiǎn)單理解為在 Linux 系統(tǒng)中就一個(gè)盤(pán),這個(gè)盤(pán)稱之為 “根目錄”,所有的東西都放在這個(gè)根目錄下面。**
pwd 命令為顯示當(dāng)前所處的目錄,上圖中目錄就是一個(gè)斜杠 “/”,這個(gè)就是根目錄。
3.1 FHS_3.0
因?yàn)?Linux 是開(kāi)源免費(fèi)的一個(gè)內(nèi)核,所以任何公司和個(gè)人都可以使用 Linux 進(jìn)行使用開(kāi)發(fā),但是為了保證文件結(jié)構(gòu)的一致性,Linux 基金會(huì)提出了文件系統(tǒng)的層次結(jié)構(gòu)標(biāo)準(zhǔn) ——《 Filesystem Hierarchy Standard 》。
可以在下面這個(gè)網(wǎng)址中下載 PDF 文檔:https://refspecs.linuxfoundation.org/FHS_3.0
這個(gè)文檔中詳細(xì)介紹了 Linux 的文件系統(tǒng)結(jié)構(gòu):
在之前很多博文中我都說(shuō)過(guò),最好的資料其實(shí)都是來(lái)自官方文檔,所以只要好好看了上面的文檔,對(duì)于 Linux 的文件結(jié)構(gòu)就能夠有全面的認(rèn)識(shí)。
但話說(shuō)回來(lái),英文的文檔確實(shí)對(duì)有部分伙伴不太友好,所以還是得,資料回看起來(lái)也相對(duì)多費(fèi)時(shí)間,所以我們還是進(jìn)行簡(jiǎn)要的說(shuō)明。
3.2 目錄簡(jiǎn)要說(shuō)明
對(duì)于初學(xué)者還沒(méi)有學(xué)習(xí)命令行,還不了解目錄結(jié)構(gòu),所以這里說(shuō)明截圖以圖形界面的形式講解,但是也僅在入門(mén)開(kāi)始的時(shí)候使用這種截圖 = =!
我們就以下圖的順序來(lái)說(shuō)明:
/bin
bin 是 Binaries (二進(jìn)制文件) 的縮寫(xiě), 這個(gè)目錄存放著最經(jīng)常使用的命令。任何人都可以使用的命令。
/boot
啟動(dòng)相關(guān)的文件,包括一些連接文件以及鏡像文件。在有些發(fā)行版中還包括grub,grub是一種通用的啟動(dòng)引導(dǎo)程序(linux 里面的 uboot)。
/cdrom
以前用來(lái)掛載CD的鏡像,現(xiàn)在逐漸淘汰了。
/dev
dev 是 Device(設(shè)備) 的縮寫(xiě), 該目錄下存放的是 Linux 的外部設(shè)備,**在 Linux 中訪問(wèn)設(shè)備的方式和訪問(wèn)文件的方式是相同的。
**
在以后學(xué)習(xí) Linux 應(yīng)用編程的時(shí)候,對(duì)外設(shè)的操作,就是通過(guò)dev 中的這些文件操作來(lái)進(jìn)行的。
☆ Linux下一切皆文件 ☆
/etc
etc 是 Etcetera(等等) 的縮寫(xiě),這個(gè)目錄用來(lái)存放所有的系統(tǒng)管理所需要的配置文件和子目錄。
系統(tǒng)和應(yīng)用程序的配置文件。
/home
用戶的主目錄,在 Linux 中,每個(gè)用戶都有一個(gè)自己的目錄,一般該目錄名是以用戶的賬號(hào)命名的,如下圖:
/lib 、/lib32、/lib64
lib 是 Library(庫(kù)) 的縮寫(xiě)這個(gè)目錄里存放著系統(tǒng)最基本的動(dòng)態(tài)連接共享庫(kù),其作用類似于 Windows 里的 DLL 文件。幾乎所有的應(yīng)用程序都需要用到這些共享庫(kù)。
/lib32 和 /lib64 屬于備用格式基本共享庫(kù)(可選),提供對(duì)32位和 64 位不同程序的庫(kù)。
/media
掛載一些多媒體設(shè)備,linux 系統(tǒng)會(huì)自動(dòng)識(shí)別一些設(shè)備,例如U盤(pán)、光驅(qū)等等,當(dāng)識(shí)別后,Linux 會(huì)把識(shí)別的設(shè)備掛載到這個(gè)目錄下。
/mnt
系統(tǒng)提供該目錄是為了讓用戶臨時(shí)掛載別的文件系統(tǒng)的,我們可以將光驅(qū)掛載在 /mnt/ 上,然后進(jìn)入該目錄就可以查看光驅(qū)里的內(nèi)容了。
這個(gè)目錄的用途與 /media 類似,在有了/media之后,這個(gè)目錄就只用來(lái)暫時(shí)掛載。
/opt
opt 是 optional (可選) 的縮寫(xiě),可以做軟件測(cè)試 或者 安裝額外軟件的目錄。
/proc
proc 是 Processes(進(jìn)程) 的縮寫(xiě),存放的都是程序相關(guān)的信息。
/proc 是一種偽文件系統(tǒng)(也即虛擬文件系統(tǒng)),存儲(chǔ)的是當(dāng)前內(nèi)核運(yùn)行狀態(tài)的一系列特殊文件,這個(gè)目錄是一個(gè)虛擬的目錄,它是系統(tǒng)內(nèi)存的映射,我們可以通過(guò)直接訪問(wèn)這個(gè)目錄來(lái)獲取系統(tǒng)信息。
/root
系統(tǒng)管理員主目錄,也稱作超級(jí)權(quán)限者的用戶主目錄。
存放系統(tǒng)管理員相關(guān)的東西,需要輸入密碼才能進(jìn)去的:
/run
是一個(gè)臨時(shí)文件系統(tǒng),存儲(chǔ)系統(tǒng)啟動(dòng)以來(lái)的信息。當(dāng)系統(tǒng)重啟時(shí),這個(gè)目錄下的文件應(yīng)該被刪掉或清除。
/sbin
與 bin 類似,只不過(guò)這里的 bin 是給系統(tǒng)管理員使用的。
s 就是 Super User 的意思,是 Superuser Binaries (超級(jí)用戶的二進(jìn)制文件) 的縮寫(xiě),這里存放的是系統(tǒng)管理員使用的系統(tǒng)管理程序,普通用戶無(wú)法執(zhí)行。
/snap
ubuntu 下面的軟件管理工具,是和 apt 軟件管理工具類似的。對(duì)于 ubuntu 的 snap 工具,有興趣的可上網(wǎng)搜搜,但是我們?cè)?Linux 下面,還是使用常用的 apt 工具即可。
/srv
該目錄存放一些網(wǎng)絡(luò)服務(wù)相關(guān)的信息,一些網(wǎng)路服務(wù)啟動(dòng)之后,這些服務(wù)所需要取用的資料目錄。
/sys
存放了一些硬件操作的接口,這個(gè)目錄使得我們可以使用控制終端控制外設(shè)變得簡(jiǎn)單。
/tmp
tmp 是 temporary(臨時(shí)) 的縮寫(xiě)這個(gè)目錄是用來(lái)存放一些臨時(shí)文件的。
這個(gè)目錄是任何人都能夠存取的,重要數(shù)據(jù)不可放置在此目錄下,F(xiàn)HS建議在開(kāi)機(jī)時(shí),將/tmp下的資料刪除。
/usr
存放了我們整個(gè)系統(tǒng)大部分的軟件,是我們整個(gè)文件系統(tǒng)中最大的一個(gè)目錄。
usr 是 unix shared resources(共享資源) 的縮寫(xiě),這是一個(gè)非常重要的目錄,用戶的很多應(yīng)用程序和文件都放在這個(gè)目錄下,類似于 windows 下的 program files 目錄。
/var
var 是 variable(變量) 的縮寫(xiě),這個(gè)目錄中存放這一些易變的文件,一些不斷擴(kuò)充著的東西,我們習(xí)慣將那些經(jīng)常被修改的目錄放在這個(gè)目錄下。包括各種日志文件。
在 Linux 系統(tǒng)中,有幾個(gè)目錄是比較重要的,平時(shí)需要注意不要誤刪除或者隨意更改內(nèi)部文件:
- /etc: 上邊也提到了,這個(gè)是系統(tǒng)中的配置文件,如果你更改了該目錄下的某個(gè)文件可能會(huì)導(dǎo)致系統(tǒng)不能啟動(dòng)。
- /bin, /sbin, /usr/bin, /usr/sbin: 這是系統(tǒng)預(yù)設(shè)的執(zhí)行文件的放置目錄。
- /var: 這是一個(gè)非常重要的目錄,系統(tǒng)上跑了很多程序,那么每個(gè)程序都會(huì)有相應(yīng)的日志產(chǎn)生,而這些日志就被記錄到這個(gè)目錄下。
結(jié)語(yǔ)
本文主要說(shuō)明了嵌入式 Linux 的一些基礎(chǔ)問(wèn)題,同時(shí)了解了一下 Linux 的文件結(jié)構(gòu)。
做 Linux 開(kāi)發(fā),要記住一句話:☆ Linux一切皆文件☆
在我們?nèi)腴T(mén)的幾篇基本上都是對(duì) Linux 系統(tǒng)的基本了解,還用不到開(kāi)發(fā)板,但是這是做嵌入式 Linux 開(kāi)發(fā)的前提,所以我們也需要認(rèn)真對(duì)待。
接下來(lái)的基礎(chǔ)文章我們還需要說(shuō)明,Linux的文件類型、屬性,基本操作等。本文就到這里,謝謝!
審核編輯:湯梓紅
-
嵌入式
+關(guān)注
關(guān)注
5082文章
19126瀏覽量
305298 -
Linux
+關(guān)注
關(guān)注
87文章
11304瀏覽量
209536 -
程序
+關(guān)注
關(guān)注
117文章
3787瀏覽量
81060 -
MMU
+關(guān)注
關(guān)注
0文章
91瀏覽量
18292 -
文件結(jié)構(gòu)
+關(guān)注
關(guān)注
0文章
5瀏覽量
5880
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論