當前位置:首頁 » 操作系統 » linux內核api手冊

linux內核api手冊

發布時間: 2022-05-09 00:13:34

linux內核api man手冊怎麼建立

1. man
man,即 manunal,是 UNIX 系統手冊的電子版本。根據習慣,UNIX 系統手冊通常分為不同的部分(或小節,即 section),每個小節闡述不同的系統內容。目前的小節劃分如下:

命令:普通用戶命令
系統調用:內核介面
函數庫調用:普通函數庫中的函數
特殊文件:/dev 目錄中的特殊文件
文件格式和約定:/etc/passwd 等文件的格式
游戲。
雜項和約定:標准文件系統布局、手冊頁結構等雜項內容
系統管理命令。
內核常式:非標準的手冊小節。便於 Linux 內核的開發而包含
其他手冊小節:

② 如何成為一個Linux內核開發者

如何參與Linux內核開發
---------------------

這是一篇將如何參與Linux內核開發的相關問題一網打盡的終極秘笈。它將指導你
成為一名Linux內核開發者,並且學會如何同Linux內核開發社區合作。它盡可能不
包括任何關於內核編程的技術細節,但會給你指引一條獲得這些知識的正確途徑。

如果這篇文章中的任何內容不再適用,請給文末列出的文件維護者發送補丁。

入門
----

你想了解如何成為一名Linux內核開發者?或者老闆吩咐你「給這個設備寫個Linux
驅動程序」?這篇文章的目的就是教會你達成這些目標的全部訣竅,它將描述你需
要經過的流程以及給出如何同內核社區合作的一些提示。它還將試圖解釋內核社區
為何這樣運作。

Linux內核大部分是由C語言寫成的,一些體系結構相關的代碼用到了匯編語言。要
參與內核開發,你必須精通C語言。除非你想為某個架構開發底層代碼,否則你並
不需要了解(任何體系結構的)匯編語言。下面列舉的書籍雖然不能替代扎實的C
語言教育和多年的開發經驗,但如果需要的話,做為參考還是不錯的:
- "The C Programming Language" by Kernighan and Ritchie [Prentice Hall]
《C程序設計語言(第2版·新版)》(徐寶文 李志 譯)[機械工業出版社]
- "Practical C Programming" by Steve Oualline [O'Reilly]
《實用C語言編程(第三版)》(郭大海 譯)[中國電力出版社]
- "C: A Reference Manual" by Harbison and Steele [Prentice Hall]
《C語言參考手冊(原書第5版)》(邱仲潘 等譯)[機械工業出版社]

Linux內核使用GNU C和GNU工具鏈開發。雖然它遵循ISO C89標准,但也用到了一些
標准中沒有定義的擴展。內核是自給自足的C環境,不依賴於標准C庫的支持,所以
並不支持C標准中的部分定義。比如long long類型的大數除法和浮點運算就不允許
使用。有時候確實很難弄清楚內核對工具鏈的要求和它所使用的擴展,不幸的是目
前還沒有明確的參考資料可以解釋它們。請查閱gcc信息頁(使用「info gcc」命令
顯示)獲得一些這方面信息。

請記住你是在學習怎麼和已經存在的開發社區打交道。它由一群形形色色的人組成,
他們對代碼、風格和過程有著很高的標准。這些標準是在長期實踐中總結出來的,
適應於地理上分散的大型開發團隊。它們已經被很好得整理成檔,建議你在開發
之前盡可能多的學習這些標准,而不要期望別人來適應你或者你公司的行為方式。

法律問題
--------

Linux內核源代碼都是在GPL(通用公共許可證)的保護下發布的。要了解這種許可
的細節請查看源代碼主目錄下的COPYING文件。如果你對它還有更深入問題請聯系
律師,而不要在Linux內核郵件組上提問。因為郵件組里的人並不是律師,不要期
望他們的話有法律效力。

對於GPL的常見問題和解答,請訪問以下鏈接:
http://www.gnu.org/licenses/gpl-faq.html

文檔
----

Linux內核代碼中包含有大量的文檔。這些文檔對於學習如何與內核社區互動有著
不可估量的價值。當一個新的功能被加入內核,最好把解釋如何使用這個功能的文
檔也放進內核。當內核的改動導致面向用戶空間的介面發生變化時,最好將相關信
息或手冊頁(manpages)的補丁發到[email protected],以向手冊頁(manpages)
的維護者解釋這些變化。

以下是內核代碼中需要閱讀的文檔:
README
文件簡要介紹了Linux內核的背景,並且描述了如何配置和編譯內核。內核的
新用戶應該從這里開始。

Documentation/Changes
文件給出了用來編譯和使用內核所需要的最小軟體包列表。

Documentation/CodingStyle
描述Linux內核的代碼風格和理由。所有新代碼需要遵守這篇文檔中定義的規
范。大多數維護者只會接收符合規定的補丁,很多人也只會幫忙檢查符合風格
的代碼。

Documentation/SubmittingPatches
Documentation/SubmittingDrivers
這兩份文檔明確描述如何創建和發送補丁,其中包括(但不僅限於):
- 郵件內容
- 郵件格式
- 選擇收件人
遵守這些規定並不能保證提交成功(因為所有補丁需要通過嚴格的內容和風格
審查),但是忽視他們幾乎就意味著失敗。

其他關於如何正確地生成補丁的優秀文檔包括:
"The Perfect Patch"
http://userweb.kernel.org/~akpm/stuff/tpp.txt
"Linux kernel patch submission format"
http://linux.yyz.us/patch-format.html

Documentation/stable_api_nonsense.txt
論證內核為什麼特意不包括穩定的內核內部API,也就是說不包括像這樣的特
性:
- 子系統中間層(為了兼容性?)
- 在不同操作系統間易於移植的驅動程序
- 減緩(甚至阻止)內核代碼的快速變化
這篇文檔對於理解Linux的開發哲學至關重要。對於將開發平台從其他操作系
統轉移到Linux的人來說也很重要。

Documentation/SecurityBugs
如果你認為自己發現了Linux內核的安全性問題,請根據這篇文檔中的步驟來
提醒其他內核開發者並幫助解決這個問題。

Documentation/ManagementStyle
描述內核維護者的工作方法及其共有特點。這對於剛剛接觸內核開發(或者對
它感到好奇)的人來說很重要,因為它解釋了很多對於內核維護者獨特行為的
普遍誤解與迷惑。

Documentation/stable_kernel_rules.txt
解釋了穩定版內核發布的規則,以及如何將改動放入這些版本的步驟。

Documentation/kernel-docs.txt
有助於內核開發的外部文檔列表。如果你在內核自帶的文檔中沒有找到你想找
的內容,可以查看這些文檔。

Documentation/applying-patches.txt
關於補丁是什麼以及如何將它打在不同內核開發分支上的好介紹

內核還擁有大量從代碼自動生成的文檔。它包含內核內部API的全面介紹以及如何
妥善處理加鎖的規則。生成的文檔會放在 Documentation/DocBook/目錄下。在內
源碼的主目錄中使用以下不同命令將會分別生成PDF、Postscript、HTML和手冊
頁等不同格式的文檔:
make pdfdocs
make psdocs
make htmldocs
make mandocs

如何成為內核開發者
------------------
如果你對Linux內核開發一無所知,你應該訪問「Linux內核新手」計劃:
http://kernelnewbies.org
它擁有一個可以問各種最基本的內核開發問題的郵件列表(在提問之前一定要記得
查找已往的郵件,確認是否有人已經回答過相同的問題)。它還擁有一個可以獲得
實時反饋的IRC聊天頻道,以及大量對於學習Linux內核開發相當有幫助的文檔。

網站簡要介紹了源代碼組織結構、子系統劃分以及目前正在進行的項目(包括內核
中的和單獨維護的)。它還提供了一些基本的幫助信息,比如如何編譯內核和打補
丁。

如果你想加入內核開發社區並協助完成一些任務,卻找不到從哪裡開始,可以訪問
「Linux內核房管員」計劃:
http://kernelnewbies.org/KernelJanitors
這是極佳的起點。它提供一個相對簡單的任務列表,列出內核代碼中需要被重新
整理或者改正的地方。通過和負責這個計劃的開發者們一同工作,你會學到將補丁
集成進內核的基本原理。如果還沒有決定下一步要做什麼的話,你還可能會得到方
向性的指點。

如果你已經有一些現成的代碼想要放到內核中,但是需要一些幫助來使它們擁有正
確的格式。請訪問「內核導師」計劃。這個計劃就是用來幫助你完成這個目標的。它
是一個郵件列表,地址如下:
http://selenic.com/mailman/listinfo/kernel-mentors

在真正動手修改內核代碼之前,理解要修改的代碼如何運作是必需的。要達到這個
目的,沒什麼辦法比直接讀代碼更有效了(大多數花招都會有相應的注釋),而且
一些特製的工具還可以提供幫助。例如,「Linux代碼交叉引用」項目就是一個值得
特別推薦的幫助工具,它將源代碼顯示在有編目和索引的網頁上。其中一個更新及
時的內核源碼庫,可以通過以下地址訪問:
http://sosdg.org/~coywolf/lxr/

開發流程
--------

目前Linux內核開發流程包括幾個「主內核分支」和很多子系統相關的內核分支。這
些分支包括:
- 2.6.x主內核源碼樹
- 2.6.x.y -stable內核源碼樹
- 2.6.x -git內核補丁集
- 2.6.x -mm內核補丁集
- 子系統相關的內核源碼樹和補丁集

2.6.x內核主源碼樹
-----------------
2.6.x內核是由Linus Torvalds(Linux的創造者)親自維護的。你可以在
kernel.org網站的pub/linux/kernel/v2.6/目錄下找到它。它的開發遵循以下步
驟:
- 每當一個新版本的內核被發布,為期兩周的集成窗口將被打開。在這段時間里
維護者可以向Linus提交大段的修改,通常這些修改已經被放到-mm內核中幾個
星期了。提交大量修改的首選方式是使用git工具(內核的代碼版本管理工具
,更多的信息可以在http://git.or.cz/獲取),不過使用普通補丁也是可以
的。
- 兩個星期以後-rc1版本內核發布。之後只有不包含可能影響整個內核穩定性的
新功能的補丁才可能被接受。請注意一個全新的驅動程序(或者文件系統)有
可能在-rc1後被接受是因為這樣的修改完全獨立,不會影響其他的代碼,所以
沒有造成內核退步的風險。在-rc1以後也可以用git向Linus提交補丁,不過所
有的補丁需要同時被發送到相應的公眾郵件列表以征詢意見。
- 當Linus認為當前的git源碼樹已經達到一個合理健全的狀態足以發布供人測試
時,一個新的-rc版本就會被發布。計劃是每周都發布新的-rc版本。
- 這個過程一直持續下去直到內核被認為達到足夠穩定的狀態,持續時間大概是
6個星期。
- 以下地址跟蹤了在每個-rc發布中發現的退步列表:
http://kernelnewbies.org/known_regressions

關於內核發布,值得一提的是Andrew Morton在linux-kernel郵件列表中如是說:
「沒有人知道新內核何時會被發布,因為發布是根據已知bug的情況來決定
的,而不是根據一個事先制定好的時間表。」

2.6.x.y -stable(穩定版)內核源碼樹
-----------------------------------
由4個數字組成的內核版本號說明此內核是-stable版本。它們包含基於2.6.x版本
內核的相對較小且至關重要的修補,這些修補針對安全性問題或者嚴重的內核退步。

這種版本的內核適用於那些期望獲得最新的穩定版內核並且不想參與測試開發版或
者實驗版的用戶。

如果沒有2.6.x.y版本內核存在,那麼最新的2.6.x版本內核就相當於是當前的穩定
版內核。

2.6.x.y版本由「穩定版」小組(郵件地址<[email protected]>)維護,一般隔周發
布新版本。

內核源碼中的Documentation/stable_kernel_rules.txt文件具體描述了可被穩定
版內核接受的修改類型以及發布的流程。

2.6.x -git補丁集
----------------
Linus的內核源碼樹的每日快照,這個源碼樹是由git工具管理的(由此得名)。這
些補丁通常每天更新以反映Linus的源碼樹的最新狀態。它們比-rc版本的內核源碼
樹更具試驗性質,因為這個補丁集是全自動生成的,沒有任何人來確認其是否真正
健全。

2.6.x -mm補丁集
---------------
這是由Andrew Morton維護的試驗性內核補丁集。Andrew將所有子系統的內核源碼
和補丁拼湊到一起,並且加入了大量從linux-kernel郵件列表中採集的補丁。這個
源碼樹是新功能和補丁的試煉場。當補丁在-mm補丁集里證明了其價值以後Andrew
或者相應子系統的維護者會將補丁發給Linus以便集成進主內核源碼樹。

在將所有新補丁發給Linus以集成到主內核源碼樹之前,我們非常鼓勵先把這些補
丁放在-mm版內核源碼樹中進行測試。

這些內核版本不適合在需要穩定運行的系統上運行,因為運行它們比運行任何其他
內核分支都更具有風險。

如果你想為內核開發進程提供幫助,請嘗試並使用這些內核版本,並在
linux-kernel郵件列表中提供反饋,告訴大家你遇到了問題還是一切正常。

通常-mm版補丁集不光包括這些額外的試驗性補丁,還包括發布時-git版主源碼樹
中的改動。

-mm版內核沒有固定的發布周期,但是通常在每兩個-rc版內核發布之間都會有若干
個-mm版內核發布(一般是1至3個)。

子系統相關內核源碼樹和補丁集
----------------------------
相當一部分內核子系統開發者會公開他們自己的開發源碼樹,以便其他人能了解內
核的不同領域正在發生的事情。如上所述,這些源碼樹會被集成到-mm版本內核中。

下面是目前可用的一些內核源碼樹的列表:
通過git管理的源碼樹:
- Kbuild開發源碼樹, Sam Ravnborg <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git

- ACPI開發源碼樹, Len Brown <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git

- 塊設備開發源碼樹, Jens Axboe <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git

- DRM開發源碼樹, Dave Airlie <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git

- ia64開發源碼樹, Tony Luck <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git

- ieee1394開發源碼樹, Jody McIntyre <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/scjody/ieee1394.git

- infiniband開發源碼樹, Roland Dreier <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git

- libata開發源碼樹, Jeff Garzik <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git

- 網路驅動程序開發源碼樹, Jeff Garzik <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git

- pcmcia開發源碼樹, Dominik Brodowski <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git

- SCSI開發源碼樹, James Bottomley <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git

使用quilt管理的補丁集:
- USB, PCI, 驅動程序核心和I2C, Greg Kroah-Hartman <[email protected]>
kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
- x86-64, 部分i386, Andi Kleen <[email protected]>
ftp.firstfloor.org:/pub/ak/x86_64/quilt/

其他內核源碼樹可以在http://git.kernel.org的列表中和MAINTAINERS文件里
找到。

報告bug
-------

bugzilla.kernel.org是Linux內核開發者們用來跟蹤內核Bug的網站。我們鼓勵用
戶在這個工具中報告找到的所有bug。如何使用內核bugzilla的細節請訪問:
http://test.kernel.org/bugzilla/faq.html

內核源碼主目錄中的REPORTING-BUGS文件里有一個很好的模板。它指導用戶如何報
告可能的內核bug以及需要提供哪些信息來幫助內核開發者們找到問題的根源。

利用bug報告
-----------

練習內核開發技能的最好辦法就是修改其他人報告的bug。你不光可以幫助內核變
得更加穩定,還可以學會如何解決實際問題從而提高自己的技能,並且讓其他開發
者感受到你的存在。修改bug是贏得其他開發者贊譽的最好辦法,因為並不是很多
人都喜歡浪費時間去修改別人報告的bug。

要嘗試修改已知的bug,請訪問http://bugzilla.kernel.org網址。如果你想獲得
最新bug的通知,可以訂閱bugme-new郵件列表(只有新的bug報告會被寄到這里)
或者訂閱bugme-janitor郵件列表(所有bugzilla的變動都會被寄到這里)。

https://lists.linux-foundation.org/mailman/listinfo/bugme-new
https://lists.linux-foundation.org/mailman/listinfo/bugme-janitors

郵件列表
--------

正如上面的文檔所描述,大多數的骨幹內核開發者都加入了Linux Kernel郵件列
表。如何訂閱和退訂列表的細節可以在這里找到:
http://vger.kernel.org/vger-lists.html#linux-kernel
網上很多地方都有這個郵件列表的存檔(archive)。可以使用搜索引擎來找到這些
存檔。比如:
http://dir.gmane.org/gmane.linux.kernel
在發信之前,我們強烈建議你先在存檔中搜索你想要討論的問題。很多已經被詳細
討論過的問題只在郵件列表的存檔中可以找到。

大多數內核子系統也有自己獨立的郵件列表來協調各自的開發工作。從
MAINTAINERS文件中可以找到不同話題對應的郵件列表。

很多郵件列表架設在kernel.org伺服器上。這些列表的信息可以在這里找到:
http://vger.kernel.org/vger-lists.html

在使用這些郵件列表時,請記住保持良好的行為習慣。下面的鏈接提供了與這些列
表(或任何其它郵件列表)交流的一些簡單規則,雖然內容有點濫竽充數。
http://www.albion.com/netiquette/

當有很多人回復你的郵件時,郵件的抄送列表會變得很長。請不要將任何人從抄送
列表中刪除,除非你有足夠的理由這么做。也不要只回復到郵件列表。請習慣於同
一封郵件接收兩次(一封來自發送者一封來自郵件列表),而不要試圖通過添加一
些奇特的郵件頭來解決這個問題,人們不會喜歡的。

記住保留你所回復內容的上下文和源頭。在你回復郵件的頂部保留「某某某說到……」
這幾行。將你的評論加在被引用的段落之間而不要放在郵件的頂部。

如果你在郵件中附帶補丁,請確認它們是可以直接閱讀的純文本(如
Documentation/SubmittingPatches文檔中所述)。內核開發者們不希望遇到附件
或者被壓縮了的補丁。只有這樣才能保證他們可以直接評論你的每行代碼。請確保
你使用的郵件發送程序不會修改空格和製表符。一個防範性的測試方法是先將郵件
發送給自己,然後自己嘗試是否可以順利地打上收到的補丁。如果測試不成功,請
調整或者更換你的郵件發送程序直到它正確工作為止。

總而言之,請尊重其他的郵件列表訂閱者。

③ linux內核api完全參考手冊 怎麼樣

很有必要,對技術提升很有幫助,linux研究的越多越好,對編程很有好處

④ linux有API手冊嗎

linux內核源文件包里您隨便打開看,想看哪個.c就看唄,要看windows中的.c,估計要請示蓋茨了吧。

沒事試試man xxx也不錯。

⑤ Linux內核API完全參考手冊的目錄

前言 本書使用方法第1章 Linux內核API分析必備知識 1Linux內核編程注意事項 1本書中模塊編譯Makefile模板 1內核調試函數printk 2內核編譯與定製 4溫馨提示 10參考文獻 11第2章 Linux內核模塊機制API 12函數:__mole_address ( ) 12函數:__mole_ref_addr ( ) 14函數:__mole_text_address ( ) 16函數:__print_symbol ( ) 18函數:__symbol_get ( ) 20函數:__symbol_put ( ) 22函數:find_mole ( ) 24函數:find_symbol ( ) 27函數:mole_is_live ( ) 30函數:mole_put ( ) 32函數:mole_refcount ( ) 34函數:sprint_symbol ( ) 36函數:symbol_put_addr ( ) 38函數:try_mole_get ( ) 40函數:use_mole ( ) 42參考文獻 44第3章 Linux進程管理內核API 45函數:__task_pid_nr_ns( ) 45函數:find_get_pid( ) 47函數:find_pid _ns( ) 49函數:find_task_by_pid_ns( ) 51函數:find_task_by_pid_type _ns( ) 53函數:find_task_by_vpid( ) 55函數:find_vpid( ) 57函數:get_pid( ) 59函數:get_task_mm( ) 60函數:is_container_init( ) 63函數:kernel_thread( ) 65函數:mmput( ) 67函數:ns_of_pid( ) 69函數:pid_nr( ) 71函數:pid_task( ) 73函數:pid_vnr( ) 75函數:put_pid( ) 77函數:task_active_pid_ns( ) 79函數:task_tgid_nr_ns( ) 81參考文獻 83第4章 Linux進程調度內核API 84函數:__wake_up( ) 84函數:__wake_up_sync( ) 87函數:__wake_up_sync_key( ) 89函數:abort_exclusive_wait( ) 91函數:add_preempt_count( ) 95函數:add_wait_queue( ) 97函數:add_wait_queue_exclusive( ) 100函數:autoremove_wake_function( ) 102函數:complete( ) 106函數:complete_all( ) 108函數:complete_done( ) 111函數:current_thread_info( ) 113函數:default_wake_function( ) 115函數:do_exit( ) 118函數:finish_wait( ) 120函數:init_waitqueue_entry( ) 123函數:init_waitqueue_head( ) 125函數:interruptible_sleep_on( ) 127函數:interruptible_sleep_on_timeout( ) 130函數:preempt_notifier_register ( ) 133函數:preempt_notifier_unregister ( ) 136函數:prepare_to_wait( ) 139函數:prepare_to_wait_exclusive( ) 142函數:remove_wait_queue( ) 146函數:sched_setscheler( ) 149函數:set_cpus_allowed_ptr( ) 152函數:set_user_nice( ) 155函數:sleep_on( ) 158函數:sleep_on_timeout( ) 160函數:sub_preempt_count( ) 162函數:task_nice( ) 164函數:try_wait_for_completion( ) 166函數:wait_for_completion( ) 169函數:wait_for_completion_interruptible( ) 172函數:wait_for_completion_interruptible_ timeout( ) 175函數:wait_for_completion_killable( ) 179函數:wait_for_completion_timeout( ) 182函數:wake_up_process( ) 184函數:yield( ) 187參考文獻 188第5章 Linux中斷機制內核API 189函數:__set_irq_handler( ) 189函數:__tasklet_hi_schele( ) 191函數:__tasklet_schele( ) 194函數:disable_irq( ) 196函數:disable_irq_nosync( ) 196函數:disable_irq_wake( ) 198函數:enable_irq( ) 201函數:enable_irq_wake( ) 203函數:free_irq( ) 205函數:kstat_irqs_cpu( ) 207函數:remove_irq( ) 209函數:request_irq( ) 213函數:request_threaded_irq( ) 216函數:set_irq_chained_handler( ) 219函數:set_irq_chip( ) 221函數:set_irq_chip_data( ) 225函數:set_irq_data( ) 227函數:set_irq_handler( ) 229函數:set_irq_type( ) 232函數:set_irq_wake( ) 234函數:setup_irq( ) 237函數:tasklet_disable( ) 239函數:tasklet_disable_nosync( ) 241函數:tasklet_enable( ) 243函數:tasklet_hi_enable( ) 244函數:tasklet_hi_schele( ) 246函數:tasklet_init( ) 248函數:tasklet_kill( ) 250函數:tasklet_shele( ) 252函數:tasklet_trylock( ) 254函數:tasklet_unlock( ) 255參考文獻 257第6章 Linux內存管理內核API 258函數:__free_pages( ) 258函數:__get_free_pages( ) 258函數:__get_vm_area( ) 260函數:__krealloc( ) 262函數:alloc_pages( ) 265函數:alloc_pages_exact( ) 268函數:alloc_vm_area( ) 270函數:do_brk( ) 272函數:do_mmap( ) 273函數:do_mmap_pgoff( ) 276函數:do_munmap( ) 279函數:find_vma( ) 281函數:find_vma_intersection( ) 284函數:free_pages( ) 286函數:free_pages_exact( ) 287函數:free_vm_area( ) 288函數:get_unmapped_area( ) 288函數:get_user_pages( ) 290函數:get_user_pages_fast( ) 292函數:get_vm_area_size( ) 294函數:get_zeroed_page( ) 295函數:kcalloc( ) 297函數:kfree( ) 299函數:kmalloc( ) 299函數:kmap_high( ) 301函數:kmem_cache_alloc( ) 303函數:kmem_cache_create( ) 305函數:kmem_cache_destroy( ) 308函數:kmem_cache_free( ) 308函數:kmem_cache_zalloc( ) 309函數:kmemp( ) 311函數:krealloc( ) 313函數:ksize( ) 315函數:kstrp( ) 318函數:kstrnp( ) 319函數:kunmap_high( ) 321函數:kzalloc( ) 321函數:memp_user( ) 323函數:mempool_alloc( ) 325函數:mempool_alloc_pages( ) 327函數:mempool_alloc_slab( ) 329函數:mempool_create( ) 331函數:mempool_create_kzalloc_pool ( ) 333函數:mempool_destroy( ) 334函數:mempool_free( ) 335函數:mempool_free_pages( ) 335函數:mempool_free_slab( ) 336函數:mempool_kfree( ) 336函數:mempool_kmalloc( ) 337函數:mempool_kzalloc( ) 339函數:mempool_resize( ) 341函數:nr_free_buffer_pages( ) 343宏:page_address( ) 345宏:page_cache_get( ) 346宏:page_cache_release( ) 348函數:page_zone( ) 349宏:probe_kernel_address( ) 352函數:probe_kernel_read( ) 354函數:probe_kernel_write( ) 355函數:vfree( ) 357函數:vma_pages( ) 358函數:vmalloc( ) 359函數:vmalloc_to_page( ) 361函數:vmalloc_to_pfn( ) 363函數:vmalloc_user( ) 365參考文獻 366第7章 Linux內核定時機制API 368函數:__round_jiffies( ) 368函數:__round_jiffies_relative( ) 369函數:__round_jiffies_up( ) 371函數:__round_jiffies_up_relative( ) 373函數:__timecompare_update( ) 375函數:add_timer( ) 377函數:current_kernel_time( ) 378函數:del_timer( ) 380函數:del_timer_sync( ) 382函數:do_gettimeofday( ) 384函數:do_settimeofday( ) 386函數:get_seconds( ) 388函數:getnstimeofday( ) 390函數:init_timer( ) 391函數:init_timer_deferrable( ) 393函數:init_timer_deferrable_key( ) 395函數:init_timer_key( ) 398函數:init_timer_on_stack( ) 400函數:init_timer_on_stack_key( ) 402函數:mktime( ) 404函數:mod_timer( ) 406函數:mod_timer_pending( ) 408函數:ns_to_timespec( ) 410函數:ns_to_timeval( ) 412函數:round_jiffies( ) 414函數:round_jiffies_relative( ) 416函數:round_jiffies_up( ) 418函數:round_jiffies_up_relative( ) 420函數:set_normalized_timespec( ) 422函數:setup_timer( ) 424函數:setup_timer_key( ) 426函數:setup_timer_on_stack( ) 428函數:setup_timer_on_stack_key( ) 430函數:timecompare_offset( ) 432函數:timecompare_transform( ) 435函數:timecompare_update( ) 436函數:timer_pending( ) 439函數:timespec_add_ns( ) 441函數:timespec_compare( ) 442函數:timespec_equal( ) 444函數:timespec_sub( ) 446函數:timespec_to_ns( ) 448函數:timeval_compare( ) 450函數:timeval_to_ns( ) 452函數:try_to_del_timer_sync( ) 453參考文獻 456第8章 Linux內核同步機制API 457函數:atomic_add( ) 457函數:atomic_add_negative( ) 458函數:atomic_add_return( ) 460函數:atomic_add_unless( ) 461宏:atomic_cmpxchg( ) 463函數:atomic_dec( ) 464函數:atomic_dec_and_test( ) 466函數:atomic_inc( ) 467函數:atomic_inc_and_test( ) 469宏:atomic_read( ) 470宏:atomic_set( ) 471函數:atomic_sub( ) 472函數:atomic_sub_and_test( ) 474函數:atomic_sub_return( ) 475函數:down( ) 477函數:down_interruptible( ) 479函數:down_killable( ) 481函數:down_read( ) 483函數:down_read_trylock( ) 485函數:down_timeout( ) 487函數:down_trylock( ) 489函數:down_write( ) 491函數:down_write_trylock( ) 492函數:downgrade_write( ) 494宏:init_rwsem( ) 496宏:read_lock( ) 498函數:read_seqbegin( ) 499函數:read_seqretry( ) 500宏:read_trylock( ) 503宏:read_unlock( ) 504宏:rwlock_init( ) 505函數:sema_init( ) 508宏:seqlock_init( ) 509宏:spin_can_lock( ) 511宏:spin_lock( ) 513宏:spin_lock_bh( ) 514宏:spin_lock_init ( ) 516宏:spin_lock_irq( ) 518宏:spin_lock_irqsave( ) 520宏:spin_trylock( ) 522宏:spin_unlock( ) 525宏:spin_unlock_bh( ) 526宏:spin_unlock_irq( ) 526宏:spin_unlock_irqrestore( ) 527宏:spin_unlock_wait( ) 527函數:up( ) 529函數:up_read( ) 531函數:up_write( ) 532宏:write_lock( ) 532函數:write_seqlock( ) 534函數:write_sequnlock( ) 534宏:write_trylock( ) 535宏:write_unlock( ) 537參考文獻 537第9章 Linux文件系統內核API 539函數:__mnt_is_readonly( ) 539函數:current_umask( ) 541函數:d_alloc( ) 542函數:d_alloc_root( ) 544函數:d_delete( ) 547函數:d_find_alias( ) 547函數:d_invalidate( ) 549函數:d_move( ) 550函數:d_validate( ) 551函數:dput( ) 553函數:fget( ) 554函數:find_inode_number( ) 557函數:generic_fillattr( ) 559函數:get_empty_filp( ) 561函數:get_fs_type( ) 563函數:get_max_files( ) 565函數:get_super( ) 566函數:get_unused_fd( ) 569函數:have_submounts( ) 570函數:I_BDEV( ) 572函數:iget_locked( ) 573函數:inode_add_bytes( ) 575函數:inode_get_bytes( ) 576函數:inode_needs_sync( ) 578函數:inode_set_bytes( ) 580函數:inode_setattr( ) 581函數:inode_sub_bytes( ) 584函數:invalidate_inodes( ) 586函數:is_bad_inode( ) 587函數:make_bad_inode( ) 588函數:may_umount( ) 590函數:may_umount_tree( ) 591函數:mnt_pin( ) 593函數:mnt_unpin( ) 594函數:mnt_want_write( ) 596函數:new_inode( ) 596函數:notify_change( ) 598函數:put_unused_fd( ) 600函數:register_filesystem( ) 602函數:unregister_filesystem( ) 604函數:unshare_fs_struct( ) 604函數:vfs_fstat( ) 606函數:vfs_getattr( ) 608函數:vfs_statfs( ) 610參考文獻 613第10章 Linux設備驅動及設備管理API 614函數:__class_create( ) 614函數:__class_register( ) 615函數:cdev_add( ) 616函數:cdev_alloc( ) 617函數:cdev_del( ) 619函數:cdev_init( ) 624宏:class_create( ) 628函數:class_destroy( ) 629宏:class_register( ) 631函數:class_unregister( ) 632函數:device_add( ) 637函數:device_create( ) 638函數: device_del( ) 640函數:device_destroy( ) 640函數:device_initialize( ) 646函數:device_register( ) 652函數:device_rename( ) 652函數:device_unregister( ) 657函數:get_device( ) 663函數:put_device( ) 663函數:register_chrdev( ) 667函數:register_keyboard_notifier( ) 668函數:unregister_chrdev( ) 669函數:unregister_keyboard_notifier( ) 675部分相關函數說明 679參考文獻 679附錄 Linux內核API快速檢索表 680

⑥ linux內核提供的能夠訪問用戶指針的api有哪些哪些是安全的怎樣檢查安全性

指向用戶區指針的用戶區指針:argv, linux把操作系統內存和用戶區內存隔離開, 用戶程序只能通過系統調用訪問系統功能, 內核態可以訪問用戶內存,但是要做檢查,因為用戶區內存是不可靠的,甚至是危險的。 _user就表示這個意思。

⑦ linux內核提供的能夠訪問用戶指針的api有哪些,哪些是安全的,怎麼檢查安全性

4. linux 用戶API (內核API,請參考Linux內核API完全手)
一、進程式控制制:
fork 創建一個新進程
clone 按指定條件創建子進程
execve 運行可執行文件
exit 中止進程
_exit 立即中止當前進程
getdtablesize 進程所能打開的最大文件數
getpgid 獲取指定進程組標識號
setpgid 設置指定進程組標志號
getpgrp 獲取當前進程組標識號
setpgrp 設置當前進程組標志號
getpid 獲取進程標識號
getppid 獲取父進程標識號
getpriority 獲取調度優先順序
setpriority 設置調度優先順序
modify_ldt 讀寫進程的本地描述表
nanosleep 使進程睡眠指定的時間
nice 改變分時進程的優先順序
pause 掛起進程,等待信號
personality 設置進程運行域
prctl 對進程進行特定操作
ptrace 進程跟蹤
sched_get_priority_max 取得靜態優先順序的上限
sched_get_priority_min 取得靜態優先順序的下限
sched_getparam 取得進程的調度參數
sched_getscheler 取得指定進程的調度策略
sched_rr_get_interval 取得按RR演算法調度的實時進程的時間片長度
sched_setparam 設置進程的調度參數
sched_setscheler 設置指定進程的調度策略和參數
sched_yield 進程主動讓出處理器,並將自己等候調度隊列隊尾
vfork 創建一個子進程,以供執行新程序,常與execve等同時使用
wait 等待子進程終止
wait3 參見wait
waitpid 等待指定子進程終止
wait4 參見waitpid
capget 獲取進程許可權
capset 設置進程許可權
getsid 獲取會晤標識號
setsid 設置會晤標識號

⑧ linux內核api函數都有哪些

linux的api函數大全哪裡有,C和C 怎麼調用API API是應用程序介面, 所以在應用級 直接與硬體打交道的是WINDOWS DDK, 設備驅動開發包, 這個開發包處理

⑨ Linux內核API完全參考手冊的內容簡介

linux作為源碼開放的操作系統已經廣泛應用於計算機與嵌入式設備,因此學會linux內核開發與編程顯得越來越重要。本書以最新的linux內核版本2.6.30為依據,對常用的內核api作了系統分析和歸納,設計了典型實例並對開發場景進行了詳細講解。本書中分析的內核api模塊包括:內核模塊機制api、進程管理內核api、進程調度內核api、中斷機制內核api、內存管理內核api、內核定時機制api、內核同步機制api、文件系統內核api和設備驅動及設備管理api。
本書立足linux內核api分析,深入實踐,內容翔實,讀者可以從低起點進行高效的內核分析與編程實踐。本書可作為高等院校計算機、電子、信息類大學生及研究生進行linux操作系統學習和編程的教材或參考書,也可作為linux開發人員和廣大linux編程開發愛好者的參考用書。

熱點內容
2013年二級c語言真題 發布:2024-10-08 10:44:47 瀏覽:242
linux的locale 發布:2024-10-08 10:44:36 瀏覽:91
2rsa演算法 發布:2024-10-08 10:29:53 瀏覽:542
南京社保密碼多少 發布:2024-10-08 10:21:01 瀏覽:472
國內的少兒編程 發布:2024-10-08 10:21:00 瀏覽:520
vscode編譯調試閃退 發布:2024-10-08 10:19:27 瀏覽:671
oracle資料庫用戶許可權 發布:2024-10-08 09:46:00 瀏覽:708
立方的演算法口訣 發布:2024-10-08 09:44:30 瀏覽:820
python輸入到excel表格 發布:2024-10-08 09:36:31 瀏覽:285
腳本拒絕訪問閃退 發布:2024-10-08 09:34:55 瀏覽:939