最近一直在搞核心驅動,什麼移植按鍵,定時器,led;
核心移植其實也就那麼點事,可是對於我這個連c語言都讀起來磕磕巴巴的初學菜鳥來說,的確有時候很煩的
比方說printf函式,我就經常忘記語句後面加上「\n」,以為我覺著麻煩,而且每一句列印完都要換行,多浪費空間啊,再說,要是列印的語句多了,找起來還得翻頁,多麻煩。這個問題老鳥講過的,他說:加上「\n」是將快取區裡面的資料都輸出出來,不管有多少,而不加「\n」,就要等到快取區滿了才會輸出;所以如果是方便除錯的話,你最好每個printf函式中加上乙個「\n」。當時就是這麼糊里糊塗大聽了沒當回事,所以除錯的時候明明寫了列印的,卻不能馬上看到列印效果,甚鬱悶
還有,核心移植,框架都懂吧。裝置初始化的時候初始化用到的裝置(暫存器設定,io口設定註冊(混雜)裝置);然後,要讀裝置寫裝置目的是使用者可以在使用者空間進行呼叫,最後用完裝置要記得釋放裝置。這個框架一說你就明白了,可是實現起來呢,(對於菜鳥來說)都是些什麼啊,說的簡單,**一句也寫不出來,不知道如何插手(只能說,誰讓咱是菜鳥呢)。
當然,學習的路上,不能碰到點困難就畏縮了,碰到問題是好事,問題多說明你進步的空間大,雖然有點阿q自欺欺人的感覺,但是,想一想,活著不就是不斷的經歷困難,克服困難,才有了豐富的生活。。。扯遠了。。。反正就是,不要怕,別人可能學習乙個東西很快,你學得慢些,但終會以你不斷的量變,引發最後的質變。這種質變需要時間,是乙個過程
說一下「技術」上面的小結:在混雜裝置驅動移植是遇到的問題記一下,(1)裝置開啟open函式。首先,裝置是以模組的形式編譯(交叉編譯工具(與核心一致))的,編譯完之後,拷貝到開發板(nfs掛載的檔案系統)上,安裝模組(*.ko檔案),執行除錯程式,要注意的是,在安裝模組時,本身就就建立了你申請的裝置檔案(名稱不可以與已有裝置重名),在除錯程式時open(「裝置檔名」),就開啟了裝置。(2)操作裝置檔案。可以通過read函式來讀裝置的狀態(前提是你要在核心**中把要給使用者讀的內容通過copy_to_user()傳出來);要麼就是通過ioctl函式(但引數有點複雜,要看你操作的裝置具體實現過程,如果沒有指定傳參,系統會有一些預設值傳到核心中執行)。寫檔案writer()跟讀read()對應(3)核心中如果要列印請使用printk函式(4)如果需要加入中斷處理,就需要設計中斷處理函式,中斷觸發可以選擇在核心open(),read(),ioctl()中,根據你的需要,要記得清理中斷。
當然以上說的很不全面,其實需要注意的問題有很多很多,希望能夠在以後的學習中的到完善。
Spark Core Spark核心部分
spark核心部分總結 rdd resilient distributed dataset 彈性分布式資料集 rdd由一組分割槽組成,每乙個block塊對應乙個分割槽 函式實際上是作用在每乙個分割槽上,每乙個分割槽都會有乙個task來處理 rdd之間存在依賴關係 寬依賴 窄依賴 分割槽的運算元必須作...
Java核心部分的總結
class b extends a 4.發生的異常必須要寫在try塊中 5.throw與throws的區別 throw是引發異常,throws是丟擲異常 6.final與finally的區別 第五課1.執行緒與程序的區別 乙個程序可以包含多個執行緒 2.thread類與實現runnable介面可以實...
自動化測試核心部分
1 使用selenium中的webdriver模組對瀏覽器進行操作 1 from selenium import webdriver 載入模組 2 b webdriver.friefox 開啟瀏覽器 5 ele b.find element by id name 定位元素 6 ele.clear e...