姓名:鄧皓軒? 學號:19020100151? 學院:電子工程學院
轉(zhuǎn)自:https://blog.csdn.net/liupeng19970119/article/details/80375642?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162855377416780357290768%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162855377416780357290768&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-13-80375642.first_rank_v2_pc_rank_v29&utm_term=%E5%B5%8C%E5%85%A5%E5%BC%8Flinux&spm=1018.2226.3001.4187
【嵌牛導(dǎo)讀】嵌入式linux的開發(fā)流程以及l(fā)inux應(yīng)用層內(nèi)容
【嵌牛鼻子】介紹嵌入式linux的開發(fā)流程以及l(fā)inux應(yīng)用層內(nèi)容的要點
【嵌牛提問】嵌入式linux的開發(fā)流程以及l(fā)inux應(yīng)用層內(nèi)容有哪些
嵌入式linux開發(fā)流程:
1.搭建前期的開發(fā)環(huán)境,例如搭建linux主機環(huán)境,交叉編譯器的安裝,還有一些常用的開發(fā)輔助軟件如source insight等等。
2.學習對硬件的直接操作,這里和單片機操作類似,我們需要查看原理圖還有數(shù)據(jù)手冊對相應(yīng)的寄存器進行操作,實現(xiàn)功能。
這里只需要學會簡單的IO,中斷,定時器,串口就可以,后面的存儲器,IIC,LCD,AD,DA等可以大致了解一下,需要用到時候著重學習。
3.學會UBOOT的移植,這里不需要自己去編寫,我們需要了解uboot的結(jié)構(gòu),并且對他進行相應(yīng)的功能添加和裁剪,了解uboot其實就是對硬件的初始化裸機程序。開發(fā)板上電之后初始化內(nèi)存,將uboot放到內(nèi)存去執(zhí)行,執(zhí)行完成之后將一些傳遞給內(nèi)核的參數(shù)放入boot parametors之后從設(shè)置好的地址取出kernel部分加載到內(nèi)存,最后將程序執(zhí)行權(quán)限交給kernel.
4.學會kernel的配置和移植。在這之前首先要熟悉makefile的基本規(guī)則,通過meuconfig進行內(nèi)核圖形化的配置,完成后執(zhí)行頂層makefile進行內(nèi)核的生成。生成的內(nèi)核需要設(shè)置很多參數(shù),其中最重要的就是對文件系統(tǒng)的支持,執(zhí)行完內(nèi)核程序之后init進程就可以創(chuàng)建其他進程,實現(xiàn)多進程的工作。
5.學會通過busybox制作一個文件系統(tǒng),對文件系統(tǒng)進行支持庫的移植,完成之后構(gòu)建設(shè)備節(jié)點等,最終生成鏡像文件燒寫到固定的位置。
6.學會驅(qū)動的開發(fā),這里我水平不足,知識簡單了解。對于內(nèi)核驅(qū)動的添加大致就是對一個關(guān)鍵結(jié)構(gòu)體的內(nèi)容添加,這里和STM32庫函數(shù)包形式差不多,但是很復(fù)雜。
7.應(yīng)用程序根據(jù)驅(qū)動程序封裝的上層接口進行相應(yīng)的硬件控制。
8.通過QT等學習界面開發(fā)對嵌入式系統(tǒng)進行界面的開發(fā),使得產(chǎn)品得到更好的用戶體驗。
linux應(yīng)用層知識:
1.熟悉linux的基本命令,掌握shell腳本操作一系列l(wèi)inux基本命令的語法。
2.熟悉C語言
3.熟悉vi編譯器的基本操作
4.使用GCC編譯器,進行編譯。
5.使用GDB調(diào)試程序
6.linux下C的和基本操作:字符串操作,內(nèi)存申請,時間獲取等。
7.對文件系統(tǒng)的操作:文件的打開關(guān)閉,創(chuàng)建,搜索,狀態(tài)獲取。
8.針對文件指針的非格式化輸入輸出(fgetc(),fputc()),格式化輸入輸出(sprintf,fscanf)操作。
9.進程操作:
? ? 進程概念:操作系統(tǒng)中被加載到內(nèi)存中的,正在運行的應(yīng)用程序,由程序,數(shù)據(jù),進程控制塊(PID等)組成。
? ? 進程狀態(tài):運行態(tài),就緒態(tài),阻塞態(tài)(請求IO或者等待某一事件觸發(fā)的進程)
? ? 進程的創(chuàng)建:一般我們執(zhí)行的程序就是一個進程,我們可以使用fork()的創(chuàng)建一個該進程的子進程,這個進程復(fù)制了父進程的數(shù)據(jù)。pid_fork(void);
? ? 進程終止:return ,exit()等
? ? 守護進程:為了維護系統(tǒng)的運行二創(chuàng)建的一些進程,父進程都是init的子進程,都是后臺運行,如果將普通的進程修改為守護進程需要按照守護進程的特性進行改造。
10.進程間通信:
? ? ? 進程間通信的作用:不同進程之間進程數(shù)據(jù)信息的交換,完成某種特定的功能。主要的方法有:管道,信號,消息隊列,信號量和共享內(nèi)存,這里簡單介紹一下常用的幾個。
? ? ? 消息隊列:將數(shù)據(jù)放入消息隊列,另外一個進程通過對應(yīng)接口函數(shù)進行調(diào)用,獲取鍵值對應(yīng)的消息隊列。
? ? ? 信號量:本身不進行數(shù)據(jù)的交換,主要是控制多個進程對共享資源的訪問。
? ? ? 共享內(nèi)存:多個進程將同一塊內(nèi)存區(qū)域映射到自己的進程空間,以此完成通信,他是進程間通信最快的一種方式。
11.多線程編程:
? 概念:據(jù)說在在嵌入式領(lǐng)域中應(yīng)用很廣泛,因為資源的問題。實際上現(xiàn)在嵌入式領(lǐng)域和傳統(tǒng)計算機領(lǐng)域界限已經(jīng)很模糊了,很多時候硬件上資源不是那額需要節(jié)省。這里先略過,后面學習的時候再深入學習一下。
12.網(wǎng)絡(luò)編程:
? ? TCP/IP協(xié)議棧:網(wǎng)絡(luò)接口層(數(shù)據(jù)幀),網(wǎng)絡(luò)層(IP協(xié)議),傳輸層(TCP/IP協(xié)議),應(yīng)用層(FTP等)。
? ? 套接字基礎(chǔ):socket套接字是封裝傳輸層協(xié)議的操作單元,讓網(wǎng)絡(luò)編程更加容易。
? ? 服務(wù)器模型:循環(huán)服務(wù)器模型(while結(jié)構(gòu),一次只能處理一個客戶端請求),并發(fā)服務(wù)器(fork實現(xiàn),創(chuàng)建子進程實現(xiàn))
? ? 域名系統(tǒng):DNS,將難以直接記憶的IP地址和端口進行人性化的域名變換。