亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 學(xué)習(xí)linux內(nèi)核時(shí),模仿linux編寫的操作系統(tǒng) [打印本頁]

作者: lmarsin    時(shí)間: 2010-03-23 01:08
標(biāo)題: 學(xué)習(xí)linux內(nèi)核時(shí),模仿linux編寫的操作系統(tǒng)
本帖最后由 lmarsin 于 2010-03-23 01:22 編輯

2005年學(xué)習(xí)趙炯博士的《linux內(nèi)核源碼注釋》后,為了能夠真正的理解,在2006年做了些實(shí)驗(yàn),自己手動(dòng)從bootloader開始編寫代碼,剛好那段時(shí)間也比較空,因此花了4、5月的時(shí)間寫了些代碼。如果對你有幫助,我深感榮幸。

2006-06-12
1、物理內(nèi)存支持到了1G,最小為16M(主要是為了方便初始化)。

2006-05-31
1、終于實(shí)現(xiàn)了UI的交互,但文件系統(tǒng)的結(jié)構(gòu)都是linux的

2006-05-23
1、特點(diǎn)修改了系統(tǒng)調(diào)用的參數(shù),使返回只eax不再傳入系統(tǒng)調(diào)用的實(shí)現(xiàn)中,不再別扭

2006-04-23
1、開始構(gòu)建文件系統(tǒng)和硬盤驅(qū)動(dòng)。

2006-04-09
1、修改了時(shí)鐘中斷發(fā)生時(shí)取被中斷的特權(quán)級的bug。
2、修改了在vp下帶有硬盤不能啟動(dòng)的bug。

2006-04-07
1、基本完成進(jìn)程調(diào)度策略。

2006-03-31
1、fork系統(tǒng)調(diào)用全部完成,包括頁面寫保護(hù)異常處理。

2006-03-28
1、當(dāng)切換進(jìn)程空間后,修改段寄存器時(shí),系統(tǒng)會(huì)崩潰的問題終于找到。(在lgdt時(shí),如果沒有分頁則lgdt的地址為線性地址,如果分頁之后,則lgdt的地址為邏輯地址,所以在分頁之后,還需得lgdt一次 ,因?yàn)槲业膬?nèi)核是映射到3G處)
2、基本完成fork系統(tǒng)調(diào)用(子進(jìn)程的堆棧沒有完成)。

2006-03-24
1、完善系統(tǒng)調(diào)用模型
2、基本完成fork系統(tǒng)調(diào)用(進(jìn)程空間沒有切換,子進(jìn)程的堆棧沒有完成),有個(gè)遺留問題,當(dāng)切換進(jìn)程空間后,修改段寄存器時(shí),系統(tǒng)會(huì)崩潰,郁悶中

2006-03-06
1、系統(tǒng)調(diào)用模型基本完成

2006-03-03
1、進(jìn)程0在ring3運(yùn)行

2006-03-02
1、加入了一個(gè)系統(tǒng)調(diào)用(用測試)

2006-02-27
1、加入了定時(shí)器

2006-02-24
1、任務(wù)可以調(diào)度起來。
2、取消低16M地址映射。
3、修改一些代碼后,可以在Cygwin下編譯了。

源碼 fairysky_0.01_20060612_153602.tar.gz (92.01 KB, 下載次數(shù): 3811)
一些文檔 fairysky doc.rar (7.77 KB, 下載次數(shù): 2964)
編譯得到的鏡像 fairysky img.rar (12.71 KB, 下載次數(shù): 2171)
作者: hellioncu    時(shí)間: 2010-03-23 08:41
下來看看,多謝LZ
作者: Godbach    時(shí)間: 2010-03-23 11:07
lmarsin兄的鏡像可以放到VMware中執(zhí)行吧。
作者: lmarsin    時(shí)間: 2010-03-23 11:43
本帖最后由 lmarsin 于 2010-03-23 11:45 編輯

可以,生成1.44M的軟盤鏡像。
提示:開發(fā)過程中是使用bochs進(jìn)行調(diào)試的。
作者: smalloc    時(shí)間: 2010-03-23 11:46
對我個(gè)人而言覺得寫這樣一個(gè)東西最難入手的是工具.目前很少有詳細(xì)講解如何使用編譯器的.
即使有個(gè)GCC,但是感覺太龐大,所以一直沒去搞懂.
作者: Ex_    時(shí)間: 2010-03-23 21:48
牛人,先頂一個(gè)。
作者: T-Bagwell    時(shí)間: 2010-03-23 22:24
可以,生成1.44M的軟盤鏡像。
提示:開發(fā)過程中是使用bochs進(jìn)行調(diào)試的。
lmarsin 發(fā)表于 2010-03-23 11:43


marsin東東?
呵呵,我是悟空啊
作者: lmarsin    時(shí)間: 2010-03-23 23:36
回復(fù) 7# T-Bagwell


    竟然在這里遇到你,悟空
作者: changzi100    時(shí)間: 2010-03-24 01:22
我暫時(shí)膜拜一下!
作者: new_learner    時(shí)間: 2010-03-24 11:55
LZ是oldlinux的某版主吧,看過你的經(jīng)歷,佩服之極~
作者: lmarsin    時(shí)間: 2010-03-24 12:27
LZ是oldlinux的某版主吧,看過你的經(jīng)歷,佩服之極~
new_learner 發(fā)表于 2010-03-24 11:55



    慚愧慚愧
作者: Godbach    時(shí)間: 2010-03-24 17:29
啟動(dòng)過程提示:
Memory is too small, die!

我用的是VMware,分配256M內(nèi)存
作者: 十年夢生    時(shí)間: 2010-03-24 17:42
  同上  分到512還是提示Memory is too  small
作者: mik    時(shí)間: 2010-03-24 17:44
我分到 2G 了還是這個(gè)提示呀
作者: mik    時(shí)間: 2010-03-24 17:44
我分到 2G 了還是這個(gè)提示呀
作者: Godbach    時(shí)間: 2010-03-24 17:45
恩,對。我也試過512M
作者: lmarsin    時(shí)間: 2010-03-24 17:49
用bochs試試
作者: Godbach    時(shí)間: 2010-03-24 17:52
LZ沒有試過VMware嗎?
作者: mik    時(shí)間: 2010-03-24 17:54
用 bochs 試了,還是這個(gè)提示
作者: Godbach    時(shí)間: 2010-03-24 18:25
我也剛用了bochs測試一下,同樣的提示啊
作者: mik    時(shí)間: 2010-03-24 18:37
lz

我在 bochs 調(diào)試了你的代碼,如下:

  1. 0009000a: (                    ): call .+0x010a             ; e80a01
  2. 0009000d: (                    ): mov ax, 0x0000            ; b80000
  3. 00090010: (                    ): mov ds, ax                ; 8ed8
  4. 00090012: (                    ): mov es, ax                ; 8ec0
  5. 00090014: (                    ): mov ah, 0x03              ; b403
  6. 00090016: (                    ): xor bh, bh                ; 30ff
  7. 00090018: (                    ): int 0x10                  ; cd10
  8. 0009001a: (                    ): mov word ptr ds:0x500, dx ; 89160005
  9. 0009001e: (                    ): mov ah, 0x88              ; b488
  10. 00090020: (                    ): int 0x15                  ; cd15            
  11. 00090022: (                    ): add ax, 0x0400            ; 050004          >> ax = 0
  12. 00090025: (                    ): shr ax, 0x02              ; c1e802
  13. 00090028: (                    ): shr ax, 0x0a              ; c1e80a
  14. 0009002b: (                    ): mov word ptr ds:0x502, ax ; a30205
  15. 0009002e: (                    ): cmp ax, 0x0004            ; 3d0400           >>>>
  16. 00090031: (                    ): jnl .+0x000d              ; 7d0d
  17. 00090033: (                    ): mov ax, 0x9000            ; b80090
  18. 00090036: (                    ): mov ds, ax                ; 8ed8
  19. 00090038: (                    ): mov si, 0x02ca            ; beca02
  20. 0009003b: (                    ): call .+0x00d9             ; e8d900
復(fù)制代碼



錯(cuò)誤在于:

00090020: (                    ): int 0x15                  ; cd15            
00090022: (                    ): add ax, 0x0400            ; 050004          >> ax = 0
00090025: (                    ): shr ax, 0x02              ; c1e802
00090028: (                    ): shr ax, 0x0a              ; c1e80a




你使用了 int 0x15 來進(jìn)行獲取 memory size, 它返回 memory 放在 ax,加上 0x400 是什么意思?
作者: mik    時(shí)間: 2010-03-24 18:41
用 int 0x15  來獲取 memory 不是好辦法呀

文檔上說:

Notes: TSRs which wish to allocate extended memory to themselves often hook this call, and return a reduced memory size. They are then free to use the memory between the new and old sizes at will.. The standard BIOS only returns memory between 1MB and 16MB; use AH=C7h for memory beyond 16MB. Not all BIOSes correctly return the carry flag, making this call unreliable unless one first checks whether it is supported through a mechanism other than calling the function and testing CF. Due to applications not dealing with more than 24-bit descriptors (286), Windows 3.0 has problems when this function reports more than 15 MB. Some releases of HIMEM.SYS are therefore limited to use only 15 MB, even when this function reports more
作者: mik    時(shí)間: 2010-03-24 18:46
本帖最后由 mik 于 2010-03-24 18:48 編輯

int 0x15 后應(yīng)該是乘以 0x400


(ax * 0x400 + 0x100000) / 0x100000

吧?



int 0x15
shr ax, 10
作者: lmarsin    時(shí)間: 2010-03-24 18:50
可能那個(gè)image比較舊,用代碼編譯后的image試試
作者: lmarsin    時(shí)間: 2010-03-24 18:58
代碼是這樣的
; 取得物理內(nèi)存大小 (1M以上的擴(kuò)展內(nèi)存, KB)
    mov    ah, 0x88
    int    0x15

;;探測內(nèi)存是否小于16M,如果小于,則提示并死機(jī)
    cmp    ax, 0x3C00
    jae    next
    mov    ax, SETUP_SEG
    mov    ds, ax  
    mov    si, mem_too_small             ;     
    call   print_msg                     ;
    jmp    $
作者: Godbach    時(shí)間: 2010-03-24 19:19
lmarsin兄方便傳個(gè)新的上來嗎。想立馬試一下。
作者: lmarsin    時(shí)間: 2010-03-24 20:21
沒問題啊,剛剛編譯的,附件為新的image和2.4.2版本的bochs配置文件。
image.rar (14.85 KB, 下載次數(shù): 172)

作者: dooros    時(shí)間: 2010-03-25 00:44
N人啊
作者: wangfei775    時(shí)間: 2010-03-25 09:38
哈哈,頂你一下,
作者: curious_cat    時(shí)間: 2010-03-25 09:42
牛人!不過怎么會(huì)有那么多時(shí)間來做這個(gè)呢?
大概看了一下,代碼還是不錯(cuò)的,至少注釋比較多!
作者: cqm    時(shí)間: 2010-03-25 09:44
牛人,先頂一個(gè)。
作者: Arthur_    時(shí)間: 2010-03-25 09:57
學(xué)習(xí)
作者: Godbach    時(shí)間: 2010-03-25 10:30
可以進(jìn)系統(tǒng)了。當(dāng)前支持什么命令啊?
作者: Godbach    時(shí)間: 2010-03-25 10:35
請教 lmarsin兄,如果我想自行編譯代碼,對編譯環(huán)境有什么具體的要求,比如編譯器版本等。
作者: lmarsin    時(shí)間: 2010-03-25 10:57
本帖最后由 lmarsin 于 2010-03-25 12:31 編輯

最好在linux下編譯,需要nasm匯編器,gcc沒有多大限制,2006年時(shí)使用的版本是3.3.4,可能高版本的gcc編譯不過,修改下代碼就行,沒多大的問題。昨天在linux gcc為4.1.2上編譯的代碼。
代碼 fairysky_0.01_20100325_105058.tar.gz (153.09 KB, 下載次數(shù): 177)

匯編器 nasm-0.98.39.tar.bz2 (531.23 KB, 下載次數(shù): 1531)
作者: Godbach    時(shí)間: 2010-03-25 11:06
我用的環(huán)境是RHEL 5.2編譯時(shí)出現(xiàn)如下問題:
Making console.c
console.c:718: error: static declaration of ‘sysbeep’ follows non-static declaration
console.c:54: error: previous declaration of ‘sysbeep’ was here
make[1]: *** [../../obj/console.o] Error 1
make[1]: Leaving directory `/work/src/fairysky0.01/drivers/char'
make: *** [lib/char.a] Error 2

查了一下該函數(shù):
[root@localhost fairysky0.01]# ack sysbeep
drivers/char/console.c
54:extern void sysbeep(void);
563:                                    sysbeep();
717:static void sysbeep(void)
728:        timer_table[BEEP_TIMER].fn = sysbeepstop;


sysbeep函數(shù)就呈現(xiàn)在console.c中。54行進(jìn)行了extern聲明,但是為什么還要在717行進(jìn)行static定義呢。
作者: Godbach    時(shí)間: 2010-03-25 11:07
gcc 4.1.2.
nasm裝的最新的:2.08.01
作者: lmarsin    時(shí)間: 2010-03-25 11:47
把 extern void sysbeep(void);改成static void sysbeep(void);
把staitc u32 VIDEO_NUM_COLUMNS = 80; 改成u32 VIDEO_NUM_COLUMNS = 80;
作者: Godbach    時(shí)間: 2010-03-25 12:54
多謝,成功編譯出鏡像了。
作者: Godbach    時(shí)間: 2010-03-25 12:59
請問lmarsin兄,這個(gè)OS還有進(jìn)一步的開發(fā)計(jì)劃嗎?
作者: ecjtubaowp    時(shí)間: 2010-03-25 13:13
強(qiáng)大,佩服中。。。
作者: Godbach    時(shí)間: 2010-03-25 14:19
系統(tǒng)當(dāng)前支持ps,uname和help三個(gè)命令
作者: lmarsin    時(shí)間: 2010-03-25 16:04
請問lmarsin兄,這個(gè)OS還有進(jìn)一步的開發(fā)計(jì)劃嗎?
Godbach 發(fā)表于 2010-03-25 12:59



   暫時(shí)沒有啦,寫著玩的,為學(xué)習(xí)而練手的
作者: Hemon_killer    時(shí)間: 2010-03-25 16:14
不能不頂啊。。。
最好是能夠認(rèn)真的讀讀。。
現(xiàn)在的氛圍太浮躁了。。
作者: Godbach    時(shí)間: 2010-03-25 16:48
暫時(shí)沒有啦,寫著玩的,為學(xué)習(xí)而練手的
lmarsin 發(fā)表于 2010-03-25 16:04

好的,我拿來好好學(xué)習(xí)一把。有問題的話,可能還需要打擾你啊
作者: wayling    時(shí)間: 2010-03-25 17:03
可惜不是以 2.6為例阿
修正后的版本在qemu上也可以跑了
作者: hzsjx    時(shí)間: 2010-03-25 17:08
{:3_179:}
作者: lishiyong110    時(shí)間: 2010-03-25 19:13
我也曾經(jīng)有這個(gè)想法的 只是自己沒勇氣去堅(jiān)持下來 佩服樓主
作者: dnybz    時(shí)間: 2010-03-25 20:13

強(qiáng)大。看看
作者: liu2g    時(shí)間: 2010-03-25 22:48
只剩下膜拜了....{:3_190:}
作者: whtech    時(shí)間: 2010-03-25 23:53
佩服
作者: BangBull    時(shí)間: 2010-03-26 09:25
傳說中的李納斯二代???
作者: hw_cncn    時(shí)間: 2010-03-26 14:35
好貼!

我是個(gè)文科生,生來對數(shù)字和硬件不敏感,對這些內(nèi)存地址管理之類的更是頭疼,讀之如讀天書;但是在我的既往經(jīng)歷中,也確實(shí)有過征服抽象的代碼的經(jīng)歷,訣竅在于先觀察哪些現(xiàn)實(shí)世界的東西,然后再把現(xiàn)實(shí)世界的東西想辦法跟抽象的數(shù)字和代碼關(guān)聯(lián)起來,這是激發(fā)探究欲望最直接、有效的方法,有了興趣,后面的一切就水到渠成。
作者: unicom_2    時(shí)間: 2010-03-26 17:34
強(qiáng)帖留名
等能看懂的時(shí)候再來看
作者: jssfy    時(shí)間: 2010-03-27 09:07
同膜拜!
作者: 望花煮    時(shí)間: 2010-03-27 14:46
只有膜拜的份。
作者: Godbach    時(shí)間: 2010-03-28 15:36
看了boot.asm和setup.asm部分的代碼,確實(shí)如文檔中描述的,省略了將boot代碼拷貝到0x90000處的過程,直接將setup的兩個(gè)扇區(qū)讀取到內(nèi)存的0x90000處。
而setup程序本身也指定了鏈接時(shí)從0x90000地址開始。
作者: Godbach    時(shí)間: 2010-03-28 16:03
setup.asm中
[ORG 0x90000]
    mov    ax, SETUP_SEG
    mov    ds, ax
    mov    es, ax

    mov    si, boot_msg
    call   print_msg
   
    mov    ax, 0x0000;
    mov    ds, ax
    mov    es, ax

這段代碼的作用是打印啟動(dòng)信息的嗎?
作者: Godbach    時(shí)間: 2010-03-28 16:19
錯(cuò)誤在于:

00090020: (                    ): int 0x15                  ; cd15            
00090022: (                    ): add ax, 0x0400            ; 050004          >> ax = 0
00090025: (                    ): shr ax, 0x02              ; c1e802
00090028: (                    ): shr ax, 0x0a              ; c1e80a




你使用了 int 0x15 來進(jìn)行獲取 memory size, 它返回 memory 放在 ax,加上 0x400 是什么意思?

mik兄,這個(gè)地方我的理解是這樣的,通過0x15中斷獲取到的是1M之外擴(kuò)展內(nèi)存的大小,以K為單位,保存在ax中。
因此,計(jì)算全部內(nèi)存的時(shí)候,需要這1M內(nèi)存加上,即1024K=0x400.
這就是add ax, 0x0400的原因。
作者: mik    時(shí)間: 2010-03-28 21:15
回復(fù) 59# Godbach


    就是因?yàn)榧恿?0x400 導(dǎo)致 ax 溢出被清 0

 結(jié)果無論多少內(nèi)存,都視為 0

 應(yīng)該先 zero-extended 到 eax 然后再 0x400

或者:eax = ax * 0x400  化為以 byte 為單位,再加上 0x100000
作者: Godbach    時(shí)間: 2010-03-28 21:30
回復(fù)  Godbach


    就是因?yàn)榧恿?0x400 導(dǎo)致 ax 溢出被清 0

 結(jié)果無論多少內(nèi)存,都視為 0

 應(yīng) ...
mik 發(fā)表于 2010-03-28 21:15

是嗎,我這里設(shè)置為512M,是可以正常啟動(dòng)的。
我自己編譯的源碼
作者: mik    時(shí)間: 2010-03-28 21:40
回復(fù) 61# Godbach


    LZ 已經(jīng)修改過代碼


LZ 在 24 樓說:

可能那個(gè)image比較舊,用代碼編譯后的image試試



在 25 樓說的:

新的代碼修改為:
  1. 代碼是這樣的
  2. ; 取得物理內(nèi)存大小 (1M以上的擴(kuò)展內(nèi)存, KB)
  3.     mov    ah, 0x88
  4.     int    0x15

  5. ;;探測內(nèi)存是否小于16M,如果小于,則提示并死機(jī)
  6.     cmp    ax, 0x3C00
  7.     jae    next
  8.     mov    ax, SETUP_SEG
  9.     mov    ds, ax  
  10.     mov    si, mem_too_small             ;     
  11.     call   print_msg                     ;
  12.     jmp    $
復(fù)制代碼
已經(jīng)去掉 ax + 0x400 這條代碼,直接比較是否大于 0x3c00 (16M)
作者: Godbach    時(shí)間: 2010-03-29 10:03
是嗎。我這邊編譯的時(shí)候,就是帶著ax+0x400的。
作者: lmarsin    時(shí)間: 2010-03-29 10:13
boot代碼我沒改
作者: Godbach    時(shí)間: 2010-03-29 10:24
恩,昨天把啟動(dòng)部分的代碼讀了以便,短小精悍啊。
作者: eclipse_2    時(shí)間: 2010-03-29 10:39
崇拜加仰慕
作者: kroody    時(shí)間: 2010-03-29 15:48
存放了好幾年拉 LZ釀酒哇 哈哈
作者: wupinlang    時(shí)間: 2010-03-29 16:07
下來看看,多謝LZ
作者: qilzm    時(shí)間: 2010-03-30 12:19
收藏~
作者: zd零    時(shí)間: 2010-03-31 13:14
牛人。。。。。。
作者: XiaoLiangLinux    時(shí)間: 2010-03-31 14:37
{:3_181:} study...ing
作者: myddk    時(shí)間: 2010-03-31 15:33
不知道源碼怎么UBUNTU下編譯?
作者: huhfire    時(shí)間: 2010-03-31 17:43
支持下,樓主很N
作者: lmarsin    時(shí)間: 2010-03-31 22:48
回復(fù) 72# myddk


  在linux下編譯沒什么特別之處。
作者: jxth152913    時(shí)間: 2010-04-01 13:17
下來學(xué)習(xí)了 謝謝樓主
作者: lmtwl    時(shí)間: 2010-04-01 17:27
樓主太厲害了

  1. Making main.c
  2. make[1]: Leaving directory `/root/fairysky0.01/init'

  3. Linking...
  4. ======================================LIBS======================================
  5. ./obj/main.o ./lib/kernel.a ./lib/char.a ./lib/block.a ./lib/mm.a ./lib/fs.a ./lib/kernellib.a ./lib/test.a
  6. ================================================================================
  7. ./lib/kernel.a(vsprintf.o): In function `number':
  8. vsprintf.c:(.text+0x235): undefined reference to `__stack_chk_fail'
  9. ./lib/mm.a(memory.o): In function `free_page':
  10. memory.c:(.text+0x73c): undefined reference to `__stack_chk_fail'
  11. make: *** [kernel.bin] Error 1
復(fù)制代碼
這個(gè)是什么錯(cuò)誤呀,沒編譯成功
作者: lmarsin    時(shí)間: 2010-04-01 18:03
回復(fù) 76# lmtwl


    有沒有修改過Makefile或其他什么文件?
作者: Celeron300A    時(shí)間: 2010-04-03 10:55
佩服,當(dāng)年大四的時(shí)候也做過類似的嘗試,不過寫到初始化部分就沒有堅(jiān)持下來。
作者: letmego163    時(shí)間: 2010-04-05 23:43
好久不上cu,都落后了!
如此好的貼,留名了。
作者: gwconan    時(shí)間: 2010-04-06 09:48
首先感謝樓主分享,但是值得批評一下。

1、至少文檔要用doxygen生成吧,寫程序容易讀程序難?!
2、做好是分解一下開發(fā)模塊和版本,可以讓人循序漸進(jìn)。

                     
!還是挺佩服LZ的,,膜拜一下!。。。。。。。。。。。。。。
作者: 小筆頭    時(shí)間: 2010-04-08 19:37
膜拜
作者: 再也不回頭    時(shí)間: 2010-04-09 08:41
LZ真是太牛逼了,佩服得五體投地……
作者: gclinux    時(shí)間: 2010-04-09 18:08
我也來膜拜一下
作者: bjq1016    時(shí)間: 2010-04-10 13:21
怎么沒有頭像?看著怪難受的
作者: just0307    時(shí)間: 2010-04-14 10:55
lz真是牛。⌒〉芘宸。。。以后也要像lz一樣自己寫點(diǎn)東西出來。
作者: yushang    時(shí)間: 2010-04-14 15:39
lz牛牛,膜拜
作者: bxfqing    時(shí)間: 2010-04-15 15:13
用 bochs 試了,還是這個(gè)提示
mik 發(fā)表于 2010-03-24 17:54



我用bochs2.4.2 測試了一下一樓的img文件,
可以運(yùn)行

只有uname 和help 命令?
作者: bxfqing    時(shí)間: 2010-04-15 16:29
標(biāo)題: gcc 4.3編譯不過 太新了? 和76樓一樣
本帖最后由 bxfqing 于 2010-04-15 17:11 編輯

我修改了GCC的編譯選項(xiàng) 文件 makefile.os
編譯通過了,不知道取消了棧保護(hù)會(huì)有什么后果
  1. CCFLG   = -O2 -c -nostdinc -fno-stack-protector -fno-builtin -I$(INCLUDE) -I.
復(fù)制代碼

最新的源代碼:
  1. Linking...
  2. ======================================LIBS======================================
  3. ./obj/main.o ./lib/kernel.a ./lib/char.a ./lib/block.a ./lib/mm.a ./lib/fs.a ./lib/kernellib.a ./lib/test.a
  4. ================================================================================
  5. ./lib/kernel.a(vsprintf.o): In function `number':
  6. vsprintf.c:(.text+0x221): undefined reference to `__stack_chk_fail'
  7. ./lib/mm.a(memory.o): In function `free_page':
  8. memory.c:(.text+0x72e): undefined reference to `__stack_chk_fail'
  9. make: *** [kernel.bin] Error 1
復(fù)制代碼
  1. servo@servo-laptop:/opt/fairysky0.01$ gcc -v
  2. Using built-in specs.
  3. Target: i486-linux-gnu
  4. Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.3.3-5ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-targets=all --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
  5. Thread model: posix
  6. gcc version 4.3.3 (Ubuntu 4.3.3-5ubuntu4)
復(fù)制代碼


查看mm.a文件,的確有未聲明的函數(shù)
  1. servo@servo-laptop:/opt/fairysky0.01$ nm -a  ./lib/mm.a

  2. memory.o:
  3. 00000000 b .bss
  4. 00000000 n .comment
  5. 00000000 d .data
  6. 00000000 n .note.GNU-stack
  7. 00000000 r .rodata.str1.1
  8. 00000000 r .rodata.str1.4
  9. 00000000 t .text
  10.          U __stack_chk_fail
  11. 00000390 T copy_page_table
  12.          U current
  13. 00000060 T do_no_page
  14. 000004d0 T do_wp_page
  15. 00000670 T free_page
  16. 00000000 T get_free_page
  17. 00000070 T init_mem
  18. 00000008 b max_mem
  19. 00000000 D mem_map
  20. 0000000c b mem_map_size
  21. 00000000 b mem_start_index
  22.          U memcpy
  23. 00000000 a memory.c
  24.          U memset
  25. 00000004 b page_num
  26.          U panic
  27. 00000004 C pparams
  28.          U printk
  29. 00000740 T put_page
  30.          U sprintf
復(fù)制代碼

作者: zhanglong71    時(shí)間: 2010-04-16 10:23
頂一個(gè)
作者: 提刀就砍    時(shí)間: 2010-04-17 23:06
我一直認(rèn)為能寫操作系統(tǒng)的都是屬于比爾蓋茨那種非人類
作者: LunarBull    時(shí)間: 2010-04-21 13:22
頂起
作者: baishen2009    時(shí)間: 2010-04-21 19:15
樓主牛人啊,向你學(xué)習(xí)了
作者: linuxDOS    時(shí)間: 2010-04-23 16:02
不錯(cuò) 我也在模仿開發(fā)呢 我看的是于淵的第二版 剛看到進(jìn)程
作者: danbz520    時(shí)間: 2010-04-23 17:43
牛人阿。!
作者: zwld1    時(shí)間: 2010-04-25 20:58
牛人,贊一個(gè)
作者: haizaolan    時(shí)間: 2010-04-27 12:28
能不能講講開發(fā)環(huán)境,能沿著樓主的足跡走一遍!
作者: lmarsin    時(shí)間: 2010-04-27 13:45
回復(fù) 96# haizaolan


    在linux解開后,在工作目錄下直接make即可
作者: seehunter    時(shí)間: 2010-04-29 17:05
能有人一起就是好
作者: seehunter    時(shí)間: 2010-04-29 17:06
多多指教
作者: ouyangjinlin    時(shí)間: 2010-05-01 14:58
能在內(nèi)核中實(shí)現(xiàn)網(wǎng)絡(luò)么,把內(nèi)核協(xié)議棧加進(jìn)去吧,這才是真正的操作系統(tǒng)。




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2