91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于Linux內(nèi)核系統(tǒng)調(diào)用是如何實(shí)現(xiàn)的與結(jié)果

Linux愛好者 ? 來源:面包板社區(qū) ? 作者:Linux愛好者 ? 2021-03-19 10:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這張圖畫了挺久的,主要是想讓大家可以從全局角度,看下linux內(nèi)核中系統(tǒng)調(diào)用的實(shí)現(xiàn)。

在講具體的細(xì)節(jié)之前,我們先根據(jù)上圖,從整體上看一下系統(tǒng)調(diào)用的實(shí)現(xiàn)。

系統(tǒng)調(diào)用的實(shí)現(xiàn)基礎(chǔ),其實(shí)就是兩條匯編指令,分別是syscall和sysret。

syscall使執(zhí)行邏輯從用戶態(tài)切換到內(nèi)核態(tài),在進(jìn)入到內(nèi)核態(tài)之后,cpu會(huì)從 MSR_LSTAR 寄存器中,獲取處理系統(tǒng)調(diào)用內(nèi)核代碼的起始地址,即上面的 entry_SYSCALL_64。

在執(zhí)行 entry_SYSCALL_64 函數(shù)時(shí),內(nèi)核代碼會(huì)根據(jù)約定,先從rax寄存器中獲取想要執(zhí)行的系統(tǒng)調(diào)用的編號(hào),然后根據(jù)該編號(hào)從sys_call_table數(shù)組中找到對(duì)應(yīng)的系統(tǒng)調(diào)用函數(shù)。

接著,從 rdi, rsi, rdx, r10, r8, r9 寄存器中獲取該系統(tǒng)調(diào)用函數(shù)所需的參數(shù),然后調(diào)用該函數(shù),把這些參數(shù)傳入其中。

在系統(tǒng)調(diào)用函數(shù)執(zhí)行完畢之后,執(zhí)行結(jié)果會(huì)被放到rax寄存器中。

最后,執(zhí)行sysret匯編指令,從內(nèi)核態(tài)切換回用戶態(tài),用戶程序繼續(xù)執(zhí)行。

如果用戶程序需要該系統(tǒng)調(diào)用的返回結(jié)果,則從rax中獲取。

總體流程就是這樣,相對(duì)來說,還是比較簡單的,主要就是先去理解syscall和sysret這兩條匯編指令,在理解這兩條匯編指令的基礎(chǔ)上,再去看內(nèi)核源碼,就會(huì)容易很多。

有關(guān)syscall和sysret指令的詳細(xì)介紹,請(qǐng)參考Intel 64 and IA-32 Architectures Software Developer’s Manual。

有了上面對(duì)系統(tǒng)調(diào)用的整理理解,我們接下來看下其具體的實(shí)現(xiàn)細(xì)節(jié)。

以write系統(tǒng)調(diào)用為例,其對(duì)應(yīng)的內(nèi)核源碼為:

在內(nèi)核中,所有的系統(tǒng)調(diào)用函數(shù)都是通過 SYSCALL_DEFINE 等宏定義的,比如上面的write函數(shù),使用的是 SYSCALL_DEFINE3。

將該宏展開后,我們可以得到如下的函數(shù)定義:

由上可見,SYSCALL_DEFINE3宏展開后為三個(gè)函數(shù),其中只有__x64_sys_write是外部可訪問的,其它兩個(gè)都有被static修飾,不能被外部訪問,所以注冊(cè)到上文中提到的sys_call_table數(shù)組里的函數(shù),應(yīng)該就是這個(gè)函數(shù)。

那該函數(shù)是怎么注冊(cè)到這個(gè)數(shù)組的呢?

我們先不說答案,先來看下sys_call_table數(shù)組的定義:

由上可見,該數(shù)組各元素的默認(rèn)值都是 __x64_sys_ni_syscall:

該函數(shù)也非常簡單,就是直接返回錯(cuò)誤碼 -ENOSYS,表示系統(tǒng)調(diào)用非法。

sys_call_table數(shù)組定義的地方好像只設(shè)置了默認(rèn)值,并沒有設(shè)置真正的系統(tǒng)調(diào)用函數(shù)。

我們?cè)倏纯雌渌胤?,看是否有代碼會(huì)注冊(cè)真正的系統(tǒng)調(diào)用函數(shù)到sys_call_table數(shù)組里。

可惜,并沒有。

這就奇怪了,那各系統(tǒng)調(diào)用函數(shù)到底是在哪里注冊(cè)的呢?

我們?cè)倩仡^仔細(xì)看下sys_call_table數(shù)組的定義,它在設(shè)置完默認(rèn)值之后,后面還include了一個(gè)名為asm/syscalls_64.h的頭文件,這個(gè)位置include頭文件還是比較奇怪的,我們看下它里面是什么內(nèi)容。

但是,這個(gè)文件居然不存在。

那我們只能初步懷疑這個(gè)頭文件是編譯時(shí)生成的,帶著這個(gè)疑問,我們?nèi)ニ阉飨嚓P(guān)內(nèi)容,確實(shí)發(fā)現(xiàn)了一些線索:

這個(gè)文件確實(shí)是編譯時(shí)生成的,上面的makefile中使用了syscalltbl.sh腳本和syscall_64.tbl模板文件來生成這個(gè)syscalls_64.h頭文件。

我們來看下syscall_64.tbl模板文件的內(nèi)容:

這里確實(shí)定義了write系統(tǒng)調(diào)用,且標(biāo)明了它的編號(hào)是1。

我們?cè)賮砜聪律傻膕yscalls_64.h頭文件:

這里面定義了很多好像宏調(diào)用一樣的東西。

__SYSCALL_COMMON,這個(gè)不就是sys_call_table數(shù)組定義那里define的那個(gè)宏嘛。

再去上面看下__SYSCALL_COMMON這個(gè)宏定義,它的作用是將sym表示的函數(shù)賦值到sys_call_table數(shù)組的nr下標(biāo)處。

所以對(duì)于__SYSCALL_COMMON(1, sys_write)來說,它就是注冊(cè)__x64_sys_write函數(shù)到sys_call_table數(shù)組下標(biāo)為1的槽位處。

而這個(gè)__x64_sys_write函數(shù),正是我們上面猜測的,SYSCALL_DEFINE3定義的write系統(tǒng)調(diào)用,展開之后的一個(gè)外部可訪問的函數(shù)。

這樣就豁然開朗了,原來真正的系統(tǒng)調(diào)用函數(shù)的注冊(cè),是通過先定義__SYSCALL_COMMON宏,再include那個(gè)根據(jù)syscall_64.tbl模板生成的syscalls_64.h頭文件來完成的,非常巧妙。

系統(tǒng)調(diào)用函數(shù)注冊(cè)到sys_call_table數(shù)組的過程,到這里已經(jīng)非常清楚了。

下面我們繼續(xù)來看下哪里在使用這個(gè)數(shù)組:

do_syscall_64在使用,方式是先通過nr在sys_call_table數(shù)組中找到對(duì)應(yīng)的系統(tǒng)調(diào)用函數(shù),然后再調(diào)用該函數(shù),將regs傳入其中。

這個(gè)流程和我們上面預(yù)估的一樣,且傳入的regs參數(shù)類型,和我們上面注冊(cè)的系統(tǒng)調(diào)用函數(shù)所需的類型也一樣。

那也就是說,regs參數(shù)的字段里,是帶著各系統(tǒng)調(diào)用函數(shù)所需的參數(shù)的,SYSCALL_DEFINE等宏展開出來的一系列函數(shù),會(huì)從這些字段中提取出真正的參數(shù),然后對(duì)其進(jìn)行類型轉(zhuǎn)換,最后這些參數(shù)被傳入到最終的系統(tǒng)調(diào)用函數(shù)中。

對(duì)于上面的write系統(tǒng)調(diào)用宏展開后的那些函數(shù),__x64_sys_write會(huì)先從regs中提取出di, si, dx字段作為真正參數(shù),然后__se_sys_write會(huì)將這些參數(shù)轉(zhuǎn)成正確的類型,最后__do_sys_write函數(shù)被調(diào)用,轉(zhuǎn)換后的這些參數(shù)被傳入其中。

在系統(tǒng)調(diào)用函數(shù)執(zhí)行完畢后,其結(jié)果會(huì)被賦值到了regs的ax字段里。

由上可見,系統(tǒng)調(diào)用函數(shù)的參數(shù)及返回值的傳遞,都是通過regs來完成的。

但文章開始的時(shí)候不是說,系統(tǒng)調(diào)用的參數(shù)及返回值的傳遞,是通過寄存器來完成的嗎,這里怎么是通過struct pt_regs的字段呢?

先別急,先來看下struct pt_regs的定義:

你有沒有發(fā)現(xiàn),這里面的字段名都是寄存器的名字。

那是不是說,在執(zhí)行系統(tǒng)調(diào)用的代碼里,有邏輯把各寄存器里的值放到了這個(gè)結(jié)構(gòu)體的對(duì)應(yīng)字段里,在結(jié)束系統(tǒng)調(diào)用時(shí),這些字段里的值又被賦值到各個(gè)對(duì)應(yīng)的寄存器里呢?

離真相越來越近。

我們繼續(xù)看使用了do_syscall_64的地方:

上圖中的entry_SYSCALL_64方法,就是系統(tǒng)調(diào)用流程中最重要的一個(gè)方法了,為了便于理解,我對(duì)該方法做了很多修改,并添加了很多注釋。

這里需要注意的是100行到121行這段邏輯,它將各寄存器的值壓入到棧中,以此來構(gòu)建struct pt_regs對(duì)象。

這就能構(gòu)建出一個(gè)struct pt_regs對(duì)象了?

是的。

我們回上面看下struct pt_regs的定義,看其字段名字及順序是不是和這里的壓棧順序正好相反。

我們?cè)傧胂拢?dāng)我們要構(gòu)建一個(gè)struct pt_regs對(duì)象時(shí),我們要為其在內(nèi)存中分配一塊空間,然后用一個(gè)地址來指向這段空間,這個(gè)地址就是該struct pt_regs對(duì)象的指針,這里需要注意的是,這個(gè)指針里存放的地址,是這段內(nèi)存空間的最小地址。

再看上面的壓棧過程,每一次壓棧操作我們都可以認(rèn)為是在分配內(nèi)存空間并賦值,當(dāng)r15被最終壓入到棧中后,整個(gè)內(nèi)存空間分配完畢,且數(shù)據(jù)也初始化完畢,此時(shí),rsp指向的棧頂?shù)刂?,就是這段內(nèi)存空間的最小地址,因?yàn)閴簵_^程中,棧頂?shù)牡刂肥且恢痹谧冃〉摹?/p>

綜上可知,在壓棧完畢后,rsp里的地址就是一個(gè)struct pt_regs對(duì)象的地址,即該對(duì)象的指針。

在構(gòu)建完struct pt_regs對(duì)象后,123行將rax中存放的系統(tǒng)調(diào)用編號(hào)賦值到了rdx里,124行將rsp里存放的struct pt_regs對(duì)象的地址,即該對(duì)象的指針,賦值到了rsi中,接著后面執(zhí)行了call指令,來調(diào)用do_syscall_64方法。

調(diào)用do_syscall_64方法之前,對(duì)rdi和rsi的賦值,是為了遵守c calling convention,因?yàn)樵谠揷alling convention中約定,在調(diào)用c方法時(shí),第一個(gè)參數(shù)要放到rdi里,第二個(gè)參數(shù)要放到rsi里。

我們?cè)偃ド厦婵聪耫o_syscall_64方法的定義,參數(shù)類型及順序是不是和我們這里說的是完全一樣的。

在調(diào)用完do_syscall_64方法后,系統(tǒng)調(diào)用的整個(gè)流程基本上就快結(jié)束了,上圖中的129行到133行做的都是一些寄存器恢復(fù)的工作,比如從棧中彈出對(duì)應(yīng)的值到rax,rip,rsp等等。

這里需要注意的是,棧中rax的值是在上面do_syscall_64方法里設(shè)置的,其存放的是系統(tǒng)調(diào)用的最終結(jié)果。

另外,在棧中彈出的rip和rsp的值,分別是用戶態(tài)程序的后續(xù)指令地址及其堆棧地址。

最后執(zhí)行sysret,從內(nèi)核態(tài)切換回用戶態(tài),繼續(xù)執(zhí)行syscall后面邏輯。

到這里,完整的系統(tǒng)調(diào)用處理流程就已經(jīng)差不多說完了,不過這里還差一小步,就是syscall指令在進(jìn)入到內(nèi)核態(tài)之后,是如何找到entry_SYSCALL_64方法的:

它其實(shí)是注冊(cè)到了MSR_LSTAR寄存器里了,syscall指令在進(jìn)入到內(nèi)核態(tài)之后,會(huì)直接從這個(gè)寄存器里拿系統(tǒng)調(diào)用處理函數(shù)的地址,并開始執(zhí)行。

系統(tǒng)調(diào)用內(nèi)核態(tài)的邏輯處理就是這些。

下面我們用一個(gè)例子來演示下用戶態(tài)部分:

編譯并執(zhí)行:

我們用syscall來執(zhí)行write系統(tǒng)調(diào)用,寫的字符串為Hi ,syscall執(zhí)行完畢后,我們直接使用ret指令將write的返回結(jié)果當(dāng)作程序的退出碼返回。

所以在上圖中,輸出了Hi,且程序的退出碼是3。

如果對(duì)上面的匯編不太理解,可以把它想像成下面這個(gè)樣子:

在這里,我們使用的是glibc中的write方法來執(zhí)行該系統(tǒng)調(diào)用,其實(shí)該方法就是對(duì)syscall指令做的一層封裝,本質(zhì)上使用的還是我們上面的匯編代碼。

這個(gè)例子到這里就結(jié)束了。

有沒有覺得不太盡興?

我們分析了這么多的代碼,最終就用了這么個(gè)小例子就結(jié)束了,不行,我們要再做點(diǎn)什么。

要不我們來自己寫個(gè)系統(tǒng)調(diào)用?

說干就干。

我們先在write系統(tǒng)調(diào)用下面定義一個(gè)我們自己的系統(tǒng)調(diào)用:

該方法很簡單,就是將參數(shù)加10,然后返回。

再把這個(gè)系統(tǒng)調(diào)用在syscall_64.tbl里注冊(cè)一下,編號(hào)為442:

編譯內(nèi)核,等待執(zhí)行。

我們?cè)侔焉厦鎸懙哪莻€(gè)hi程序改下并編譯好:

然后在虛擬機(jī)中啟動(dòng)新編譯的linux內(nèi)核,并執(zhí)行上面的程序:

看結(jié)果,正好就是20。
編輯:lyn

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5608

    瀏覽量

    129943
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    321

    瀏覽量

    23194

原文標(biāo)題:Linux內(nèi)核:系統(tǒng)調(diào)用是如何實(shí)現(xiàn)的

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Linux內(nèi)核伙伴系統(tǒng)內(nèi)存申請(qǐng)函數(shù)詳解:從原理到實(shí)戰(zhàn)

    Linux 內(nèi)核中,內(nèi)存管理是整個(gè)系統(tǒng)穩(wěn)定運(yùn)行的基石,而伙伴系統(tǒng)(Buddy System) 作為內(nèi)核物理內(nèi)存分配的核心機(jī)制,更是驅(qū)動(dòng)開
    的頭像 發(fā)表于 02-10 16:58 ?3626次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>伙伴<b class='flag-5'>系統(tǒng)</b>內(nèi)存申請(qǐng)函數(shù)詳解:從原理到實(shí)戰(zhàn)

    Linux內(nèi)核bug狩獵指南:從棧跟蹤到修復(fù),官方文檔教你搞定系統(tǒng)核心故障

    內(nèi)核Linux 系統(tǒng)的 “心臟”—— 一旦它出 bug,小則功能異常,大則系統(tǒng)崩潰、死機(jī)。但內(nèi)核 bug 往往藏在百萬行代碼中,想快速定
    的頭像 發(fā)表于 02-06 16:59 ?3113次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>bug狩獵指南:從棧跟蹤到修復(fù),官方文檔教你搞定<b class='flag-5'>系統(tǒng)</b>核心故障

    Linux系統(tǒng)性能調(diào)試工具—strace

    今天給大家分享一個(gè)linux內(nèi)核自帶的調(diào)試工具,該工具可用于查看和定位系統(tǒng)問題,進(jìn)程運(yùn)行過程探索,進(jìn)行進(jìn)程監(jiān)控,對(duì)每個(gè)系統(tǒng)調(diào)用都可以監(jiān)測,有
    的頭像 發(fā)表于 01-30 17:03 ?1901次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>系統(tǒng)</b>性能調(diào)試工具—strace

    Linux系統(tǒng)內(nèi)核參數(shù)調(diào)優(yōu)實(shí)戰(zhàn)指南

    Linux 內(nèi)核參數(shù)調(diào)優(yōu)是系統(tǒng)性能優(yōu)化的核心環(huán)節(jié)。隨著云原生架構(gòu)的普及和硬件性能的飛速提升,默認(rèn)的內(nèi)核參數(shù)配置往往無法充分發(fā)揮系統(tǒng)潛力。在高
    的頭像 發(fā)表于 01-28 14:27 ?417次閱讀

    【「Linux 設(shè)備驅(qū)動(dòng)開發(fā)(第 2 版)」閱讀體驗(yàn)】Linux內(nèi)核開發(fā)基礎(chǔ)

    ()、msleep_interruptible()這些API用于簡單睡眠 內(nèi)核延遲或忙等待 可以調(diào)用ndelay()、udelay()、mdelay()這些API實(shí)現(xiàn) Linux
    發(fā)表于 01-12 22:45

    【「Linux 設(shè)備驅(qū)動(dòng)開發(fā)(第 2 版)」閱讀體驗(yàn)】+讀內(nèi)核處理的核心輔助函數(shù)

    一個(gè)是“鎖”;另一個(gè)是“條件變量”。內(nèi)核中最常見的鎖是自旋鎖和互斥鎖,操作系統(tǒng)內(nèi)核通常使用硬件提供的原子操作來實(shí)現(xiàn)鎖的機(jī)制。而條件變量并不是Linu
    發(fā)表于 01-10 22:08

    ElfBoard嵌入式教育科普|Linux系統(tǒng)I/O接口:Open函數(shù)詳解

    1.函數(shù)概述open()是Linux/Unix內(nèi)核提供的底層系統(tǒng)調(diào)用,核心功能是打開或創(chuàng)建文件。成功調(diào)用后,
    的頭像 發(fā)表于 12-29 11:41 ?1049次閱讀
    ElfBoard嵌入式教育科普|<b class='flag-5'>Linux</b><b class='flag-5'>系統(tǒng)</b>I/O接口:Open函數(shù)詳解

    深入Linux內(nèi)核:進(jìn)程調(diào)度的核心邏輯與實(shí)現(xiàn)細(xì)節(jié)

    ,背后都離不開內(nèi)核調(diào)度算法的精準(zhǔn)操控。今天,我們就從優(yōu)先級(jí)、調(diào)度算法、時(shí)間片分配到底層實(shí)現(xiàn),全方位拆解Linux內(nèi)核進(jìn)程調(diào)度的核心邏輯。 一、進(jìn)程調(diào)度的“身份標(biāo)識(shí)”:優(yōu)先級(jí)與分類 要理
    的頭像 發(fā)表于 12-24 07:05 ?4285次閱讀
    深入<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>:進(jìn)程調(diào)度的核心邏輯與<b class='flag-5'>實(shí)現(xiàn)</b>細(xì)節(jié)

    基于 DR1M90 的 Linux-RT 內(nèi)核開發(fā):從編譯配置到 GPIO / 按鍵應(yīng)用實(shí)現(xiàn)(1)

    本手冊(cè)由創(chuàng)龍科技研發(fā),針對(duì) DR1M90,詳述 Linux-RT 實(shí)時(shí)內(nèi)核開發(fā):含實(shí)時(shí)性測試(LinuxLinux-RT 對(duì)比、CPU 空載 / 滿負(fù)荷 / 隔離狀態(tài)測試)、
    的頭像 發(fā)表于 12-02 10:38 ?1170次閱讀
    基于 DR1M90 的 <b class='flag-5'>Linux</b>-RT <b class='flag-5'>內(nèi)核</b>開發(fā):從編譯配置到 GPIO / 按鍵應(yīng)用<b class='flag-5'>實(shí)現(xiàn)</b>(1)

    Linux內(nèi)核模塊的加載機(jī)制

    使用insmod或modprobe命令來加載模塊。insmod是直接加載,而modprobe會(huì)處理依賴關(guān)系。 2、如何工作 那內(nèi)核模塊具體是怎么工作的呢?當(dāng)執(zhí)行insmod時(shí),會(huì)調(diào)用系統(tǒng)調(diào)用
    發(fā)表于 11-25 06:59

    探索操作系統(tǒng)底層的關(guān)鍵接口

      在linux中,將程序的運(yùn)行空間分為內(nèi)核空間與用戶空間(內(nèi)核態(tài)和用戶態(tài)),在邏輯上它們之間是相互隔離的,因此用戶程序不能訪問內(nèi)核數(shù)據(jù),也無法使用
    的頭像 發(fā)表于 11-08 12:42 ?743次閱讀

    深入了解系統(tǒng)調(diào)用API:探索操作系統(tǒng)底層的關(guān)鍵接口

    ,也無法使用內(nèi)核函數(shù)。當(dāng)用戶進(jìn)程必須訪問內(nèi)核或使用某個(gè)內(nèi)核函數(shù)時(shí),就得使用系統(tǒng)調(diào)用(System Call)。在
    的頭像 發(fā)表于 11-03 09:20 ?690次閱讀

    如何配置和驗(yàn)證Linux內(nèi)核參數(shù)

    Linux系統(tǒng)運(yùn)維和性能優(yōu)化中,內(nèi)核參數(shù)(sysctl)的配置至關(guān)重要。合理的參數(shù)調(diào)整可以顯著提升網(wǎng)絡(luò)性能、系統(tǒng)穩(wěn)定性及資源利用率。然而,僅僅修改參數(shù)是不夠的,如何驗(yàn)證這些參數(shù)是否生
    的頭像 發(fā)表于 05-29 17:40 ?1147次閱讀

    如何在Linux內(nèi)核5.18版本之后和64位架構(gòu)中從內(nèi)核空間調(diào)用ioctl?

    我嘗試在最近的內(nèi)核中重新構(gòu)建以前版本 (4.19) 的 Linux 設(shè)備驅(qū)動(dòng)程序,即嵌入式平臺(tái)上的 6.1.22,ARM64 架構(gòu)。 驅(qū)動(dòng)程序管理 tty 設(shè)備。 當(dāng)我調(diào)用類似于用戶空間
    發(fā)表于 04-02 06:06

    樹莓派4 性能大比拼:標(biāo)準(zhǔn)Linux與實(shí)時(shí)Linux 4.19內(nèi)核的延遲測試

    引言本文是對(duì)我之前關(guān)于RaspberryPi3同一主題的帖子的更新。與之前的帖子一樣,我使用的是隨Raspbian鏡像提供的標(biāo)準(zhǔn)內(nèi)核,以及應(yīng)用了RT補(bǔ)丁的相似內(nèi)核版本。對(duì)于實(shí)時(shí)版,我
    的頭像 發(fā)表于 03-25 09:39 ?808次閱讀
    樹莓派4 性能大比拼:標(biāo)準(zhǔn)<b class='flag-5'>Linux</b>與實(shí)時(shí)<b class='flag-5'>Linux</b> 4.19<b class='flag-5'>內(nèi)核</b>的延遲測試