<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          調(diào)試 Linux 最早期的代碼

          共 2969字,需瀏覽 6分鐘

           ·

          2022-05-15 00:47

          點(diǎn)擊關(guān)注公眾號,Java干貨及時(shí)送達(dá)

          來源丨低并發(fā)編程(ID:dibingfa)

          已獲得原公眾號授權(quán)轉(zhuǎn)載

          Linux 0.11 是 Linux 最早期的代碼,非常適合作為第一款深入探索操作系統(tǒng)原理的代碼。

          ?

          但同時(shí),Linux 0.11 因?yàn)楹芏喙爬瞎ぞ哝湹娜笔?,以及一些過時(shí)的文件格式比如 a.out,導(dǎo)致成功編譯并運(yùn)行它十分困難,更別說進(jìn)行源碼級別的 debug 調(diào)試了。

          ?

          要想成功調(diào)試 Linux 0.11,需要進(jìn)行很多改造,并依賴一些古老的工具鏈,對于僅僅是將 Linux 0.11 作為研究操作系統(tǒng)的手段的我們,無需花費(fèi)精力自己去改造它,踩各種坑。

          ?

          所以今天我就分享一下我調(diào)試 Linux 0.11 的一種方式,同時(shí)也為了我自己以后換電腦的時(shí)候方便照著自己的教程直接無腦搭建環(huán)境,那我們開始吧~

          ?


          整體思路和效果

          ?


          我用的方式是,在 windows 上,搞一個(gè) Ubuntu 16.04 的虛擬機(jī),在里面用 qemu 啟動(dòng)一個(gè)開啟了調(diào)試的 Linux 0.11 系統(tǒng),然后用本機(jī)的 vscode remote ssh 連接到虛擬機(jī),并開啟 gdb 調(diào)試,最終的效果如下。

          ?

          ?

          這是最舒服的方式,因?yàn)?vscode 是本機(jī)的,完全不受虛擬機(jī)的影響,這也是我調(diào)試其他代碼時(shí)比較喜歡的方式。

          ?

          如果你有自己的豪華服務(wù)器,虛擬機(jī)也可以換成服務(wù)器,這樣不但編譯速度快,不消耗自己電腦的性能,同時(shí)也可以不受終端的影響,在家在公司都可以隨時(shí)調(diào)試(方便摸魚~)

          ?

          當(dāng)然如果你不需要這么直觀 vscode 這一步也可以換成 gdb 命令行,在虛擬機(jī)里直接執(zhí)行 gdb 相關(guān)命令即可。

          ?

          ?

          下面我們就一步步來實(shí)現(xiàn)這個(gè)效果。

          ?


          第一步:配置虛擬機(jī)

          ?


          我用的虛擬機(jī)軟件是

          Oracle VM VirtualBox Version 6.0.8 Edition

          ?

          官網(wǎng)是:

          https://ubuntu.com/

          下載頁面是:

          https://www.virtualbox.org/wiki/Download_Old_Builds_6_0

          我這個(gè)版本的直接下載地址是:

          https://download.virtualbox.org/virtualbox/6.0.8/VirtualBox-6.0.8-130520-Win.exe

          ?

          安裝的操作系統(tǒng)鏡像是

          ubuntu-16.04.7-desktop-amd64

          ?

          官網(wǎng)是:

          https://ubuntu.com/

          下載頁面是:

          https://releases.ubuntu.com/xenial/

          我這個(gè)版本的直接下載地址是:

          https://releases.ubuntu.com/xenial/ubuntu-16.04.7-desktop-amd64.iso

          ?

          這個(gè)就不詳細(xì)展開講解了,最終達(dá)到這個(gè)效果就行。

          ?

          ?

          ?

          第二步:安裝 qemu

          ?


          qemu 是模擬器,簡單理解和虛擬機(jī)一樣,用來當(dāng)做真機(jī)啟動(dòng) Linux 0.11 的。

          ?

          官網(wǎng)是這個(gè):

          https://www.qemu.org/

          ?

          我們在剛剛的 Ubuntu 虛擬機(jī)里直接按照官方教程下載 qemu

          sudo apt-get install qemu

          ?

          下載好后,我們輸入 qemu-,按兩下 tab,查看下支持的體系結(jié)構(gòu)。

          ?

          ?

          看到有 qemu-system-x86_64 即可,一會我們會用這個(gè)來模擬啟動(dòng) Linux 0.11。

          ?


          第三步:下載并運(yùn)行可調(diào)試的 Linux 0.11 源碼

          ?


          這一步直接下官網(wǎng)上的是不行的,因?yàn)槟莻€(gè)依賴好多古老的工具鏈。

          ?

          這里一般網(wǎng)上都是參考了趙炯老師為我們修改好的 Linux 0.11 源碼,用現(xiàn)代的工具鏈即可構(gòu)建,造福了廣大熱愛內(nèi)核的開發(fā)者,我們直接拿來主義即可。

          ?

          在趙炯老師準(zhǔn)備好的源碼的基礎(chǔ)上,很多人又進(jìn)行了二次改造,使得其可以一鍵 qemu 或 bochs 啟動(dòng),這里我選擇了倉庫:

          ?

          https://github.com/yuan-xy/Linux-0.11

          ?

          直接把源碼下載下來,進(jìn)入根目錄,輸入命令 make start 就可以把 Linux 0.11 跑起來了。

          ?

          ?

          如果想 debug,那么就以 debug 形式啟動(dòng),輸入命令 make debug,它會卡住不動(dòng)。

          ?

          ?

          此時(shí)其實(shí)你就可以通過 gdb 進(jìn)行調(diào)試了。

          ?

          再開一個(gè)窗口,輸入命令?gdb tools/system

          然后?target remote :1234

          就可以愉快地進(jìn)行 gdb 調(diào)試了

          ?

          ?

          具體 gdb 怎么玩,就不展開講解了。

          ?


          第四步:通過 vscode 遠(yuǎn)程調(diào)試

          ?


          當(dāng)然,你也可以在虛擬機(jī)里用 vscode 進(jìn)行本地調(diào)試,但我覺得不爽。

          ?

          所以,在本機(jī)的 windows 里安裝好 vscode,下載 remote-ssh 插件。

          ?

          ?

          下載好后按下 ctrl + p,輸入 >remote-ssh,找到 Connect to Host

          ?

          ?

          按照它提示的格式輸入你的虛擬機(jī) IP 和用戶名,隨后輸入密碼,即可遠(yuǎn)程連接到虛擬機(jī)。

          ?

          之后點(diǎn)擊菜單欄 運(yùn)行-啟用調(diào)試,在彈出的 launch.json 中做如下配置

          ?


          {
          ????"version":?"0.2.0",
          ????"configurations":?[
          ????????{
          ????????????"name":?"(gdb)?Launch",
          ????????????"type":?"cppdbg",
          ????????????"request":?"launch",
          ????????????"program":?"${workspaceFolder}/tools/system",
          ????????????"miDebuggerServerAddress":?"127.0.0.1:1234",
          ????????????"args":?[],
          ????????????"stopAtEntry":?false,
          ????????????"cwd":?"${workspaceFolder}",
          ????????????"environment":?[],
          ????????????"externalConsole":?false,
          ????????????"MIMode":?"gdb"
          ????????}
          ????]
          }

          配置好后保存,在 main 函數(shù)里打個(gè)斷點(diǎn),再次點(diǎn)擊菜單欄 運(yùn)行-啟用調(diào)試,可以發(fā)現(xiàn)調(diào)試成功。

          ?

          ?

          當(dāng)然,記得每次 vscode 調(diào)試前,在虛擬機(jī)里先把 Linux 0.11 跑起來,就是執(zhí)行命令 make debug。

          ?

          這一步也可以配置到 vscode 里,但這一步?jīng)]多少工作量,而且也不方便直觀看到虛擬機(jī)里的行為,我就懶得弄了。

          ?

          好了,這個(gè)教程到這里就結(jié)束了,這就是我調(diào)試 Linux 0.11 的其中一個(gè)辦法,當(dāng)然每個(gè)人可能都有自己喜歡的方式,只要適合自己就好。

          ????

          1、拖動(dòng)文件就能觸發(fā)7-Zip安全漏洞,波及所有版本

          2、進(jìn)程切換的本質(zhì)是什么?

          3、一次 SQL 查詢優(yōu)化原理分析:900W+ 數(shù)據(jù),從 17s 到 300ms

          4、Redis數(shù)據(jù)結(jié)構(gòu)為什么既省內(nèi)存又高效?

          5、IntelliJ IDEA快捷鍵大全 + 動(dòng)圖演示

          6、全球第三瀏覽器,封殺中國用戶這種操作?。ㄎ哪┧蜁?/a>

          點(diǎn)

          點(diǎn)

          點(diǎn)點(diǎn)

          點(diǎn)

          瀏覽 74
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  丁香五月婷婷激情小说 | 亚洲天堂人妻 | 考逼免费视频 | 乱伦毛片AV | 人妻体内射精一区二区三区 |