Linux 0.11內(nèi)核編譯錯誤記錄

使用環(huán)境

  • 系統(tǒng): Ubuntu16.04.1
  • 編譯器: gcc version 5.4.0 as86 version: 0.16.17 ld86 version: 0.16.17
  • 源碼: Linux 0.11 source code

錯誤列表


現(xiàn)象1: 提示gas gld 比識別
措施: gnu編譯器發(fā)展到后來,越來越流行,更多使用別名為 as ld gcc等.


現(xiàn)象2: 提示字節(jié)對齊需要是 2的倍數(shù)
措施: 具體解決方法: 利用命令 sed -i 's/align 2/align 4/g' filename 替換align 2 為 align 4(align 3 替換為 align 8)
sed -i 's/align 2/align 4/g' boot/head.s
sed -i 's/align 3/align 8/g' boot/head.s


現(xiàn)象3: -fcombine-regs -mstring-insns選項不識別
措施: 此兩個選項已經(jīng)過時,直接去掉即可


現(xiàn)象4: warning 特別多
措施: 將-Wall 替換為 -w


現(xiàn)象5: __stack_chk_fail 未定義
措施: 去網(wǎng)上搜了一下,在Makefile中的$(CFLAGS)后面加上-fno-stack-protector,即不需要棧保護(hù)


現(xiàn)象6: main.c 中_syscall0重復(fù)定義
措施: main.c static inline _syscall0(int, fork) 去掉static即可


現(xiàn)象7: 提示內(nèi)嵌匯編不符合語法限制
措施: 類似的問題在后面編譯中出現(xiàn)好多,C內(nèi)嵌匯編的格式asm(匯編語句:輸入寄存器:輸出寄存器:可能被修改的寄存器),最新的GCC規(guī)定 輸入或輸出寄存器不能出現(xiàn)在可能被修改的寄存器中,目前看到網(wǎng)上的方法是把所有類似問題的可能被修改的寄存器全部刪掉 解決方案:find -type f -exec sed -i 's/:"\w{2}"(,"\w{2}"))/:) /g' {} ; 其中's/:"\w{2}"(,"\w{2}")/:/g'


現(xiàn)象8: 在 control.c 中清楚定義了 static unsigned char attr = 0x70,而在鏈接 control.o 時,卻爆出 attr未定義。
措施:nm -C control.o 查看其符號,發(fā)現(xiàn)attr確實處于未定義狀態(tài)。故單獨編譯一個小程序定義靜態(tài)變量,查看其 .o 文件中,發(fā)現(xiàn)靜態(tài)變量定義正常。故考慮為編譯選項差異導(dǎo)致,最終發(fā)現(xiàn)因為 -O 編譯優(yōu)化選項導(dǎo)致,目前處理方式是去掉該選項。


現(xiàn)象9: build.c:(.text+0xde): undefined reference to `MAJOR'
措施: 通過分析編譯打印信息,發(fā)現(xiàn)編譯時沒有加入頭文件路徑 -Iinclude


現(xiàn)象10: fs/fs.o: In function check_disk_change':(.text+0x1b2f): undefined reference toinvalidate_buffers'
措施: 查找發(fā)現(xiàn)此函數(shù)定義在buffer.c 中,且為內(nèi)聯(lián)函數(shù), 故嘗試將其更改為普通函數(shù), 然后編譯通過.


現(xiàn)象11: 編譯 build.c 時報錯:/usr/include/i386-linux -gnu/bits/stdio2.h:57:8: error: unknown type name ‘__gnuc_va_list’
措施: 分析發(fā)現(xiàn)時此系列錯誤均由 -Iinclude 選項導(dǎo)致, 而該選項在想象9中加入, 故考慮去掉該選項, 直接在build.c 中加入 MAJOR 宏定義.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 100,832評論 9 468
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,697評論 19 139
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,353評論 2 33
  • 時間將你我散落風(fēng)中 你或?qū)L(fēng)化成塵埃 而我或?qū)㈦S風(fēng)飄向遠(yuǎn)方 相向而行不再聯(lián)絡(luò)
    皮卡chocho閱讀 138評論 -1 1
  • 我現(xiàn)在住的城市下午兩點,微涼的雨斷斷續(xù)續(xù),初夏的英國仍然保有初春的料峭。 從二十歲起,每年在家里的時間總和不超過二...
    卡喬叔叔閱讀 177評論 2 1

友情鏈接更多精彩內(nèi)容