<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 最早期的代碼

          共 2744字,需瀏覽 6分鐘

           ·

          2022-05-14 12:02

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

          ?

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

          ?

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

          ?

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

          ?


          整體思路和效果

          ?


          我用的方式是,在 windows 上,搞一個(gè) Ubuntu 16.04 的虛擬機(jī),在里面用 qemu 啟動(dòng)一個(gè)開(kāi)啟了調(diào)試的 Linux 0.11 系統(tǒng),然后用本機(jī)的 vscode remote ssh 連接到虛擬機(jī),并開(kāi)啟 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)命令即可。

          ?

          ?

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

          ?


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

          ?


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

          Oracle VM VirtualBox Version 6.0.8 Edition

          ?

          官網(wǎng)是:

          https://ubuntu.com/

          下載頁(yè)面是:

          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/

          下載頁(yè)面是:

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

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

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

          ?

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

          ?

          ?

          ?

          第二步:安裝 qemu

          ?


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

          ?

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

          https://www.qemu.org/

          ?

          我們?cè)趧倓偟?Ubuntu 虛擬機(jī)里直接按照官方教程下載 qemu

          sudo apt-get install qemu

          ?

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

          ?

          ?

          看到有 qemu-system-x86_64 即可,一會(huì)我們會(huì)用這個(gè)來(lái)模擬啟動(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)建,造福了廣大熱愛(ài)內(nèi)核的開(kāi)發(fā)者,我們直接拿來(lái)主義即可。

          ?

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

          ?

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

          ?

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

          ?

          ?

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

          ?

          ?

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

          ?

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

          然后?target remote :1234

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

          ?

          ?

          具體 gdb 怎么玩,就不展開(kāi)講解了。

          ?


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

          ?


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

          ?

          所以,在本機(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 跑起來(lái),就是執(zhí)行命令 make debug。

          ?

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

          ?

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

          瀏覽 115
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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片 | 国产熟女一区二区 |