免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lmarsin
打印 上一主题 下一主题

学习linux内核时,模仿linux编写的操作系统 [复制链接]

论坛徽章:
0
121 [报告]
发表于 2010-05-26 12:09 |只看该作者
回复 120# lmarsin

非常感谢楼主的回复!
我的意思是如何通过编码在硬盘上构建文件系统,可以在硬盘上存放和读取文件的功能,可是是本身我对文件系统就很不了解,有些对方说的让楼主不理解,还请楼主见谅!

论坛徽章:
0
122 [报告]
发表于 2010-05-26 12:37 |只看该作者
回复 121# _LoveLinux


    要想知道如何构建,请参见mkfs命令的源码。
    要想知道如何读写文件,那需要看文件系统的类型,目前linux支持的已经够多了。

论坛徽章:
0
123 [报告]
发表于 2010-05-26 13:44 |只看该作者
回复 122# lmarsin

谢谢!

论坛徽章:
0
124 [报告]
发表于 2010-05-27 17:51 |只看该作者
拜一下,楼主太牛X了

论坛徽章:
0
125 [报告]
发表于 2010-05-27 18:39 |只看该作者
我想参加你们的工作组,行吗?

论坛徽章:
0
126 [报告]
发表于 2010-06-13 22:17 |只看该作者
请教lz一个关于esp寄存器的问题。
lz的代码,文件scheduler.h中
#define switch_to(prev, next, last)
中有以下一段代码,关于esp寄存器的保存

"movl %%esp, %0\n\t"    \    把当前进程的esp保存到自己pcb中
由于此时是时钟中断的处理程序在运行,那么esp中的数据是否已经不再是中断执行前所运行的进程所对应的栈顶位置?
我是新手,如果有理解错误,请指教。

论坛徽章:
0
127 [报告]
发表于 2010-06-15 15:19 |只看该作者
楼主的代码我也看了,我现在也再写小OS练手,也是读0.11的代码开始的(我也经常在oldlinux上潜水的:)。可能我没什么可以介绍的,但是我可以给像我一样的新手指点下镜像的编译方法,并且完全借助GNU工具链,替代nasm。
这里我以boot.s和head.s来生成映像的(boot.s基本启动代码,head.s手工设置2个进程 交替打印A,B,这个是我仿照《linux内核剖析》编译出来的,后来又改写成AT&T汇编了,也就之后以这个为基础写os的),可以看下我的Makefile:
1.这个是第一种方法:
####生成编译后的2进制文件####
all:
        as boot.s -o boot.o
        objcopy -O binary boot.o boot #生成2进制文件 去除多于section
        as head.s -o head.o
        objcopy -O binary head.o head

####生成镜像###########
image:
        cp floppy.img.backup floppy.img  #这里floppy.img.backup是用bximage生成的1.44M的软盘印象
        cat boot > img.tmp       
        cat head >> img.tmp                #主要是这里'>>'紧接着boot之后把head写入
临时文件中
        dd if=img.tmp of=floppy.img conv=notrunc

这里objcopy是从2.6内核Makefile中“偷”学来的,你也可以像linux Makefle中那样bjcopy -O binary -R .note -R .comment -S boot.o boot(关于参数可以看下man手册,还是很好理解的,可能稍稍要知道一些编译链接的知识和ELF文件格式)

2.这个方法我现在用的:
all:floppy.img

floppy.img:tmp.img
        cp bak/floppy.img.bak floppy.img
        dd if=tmp.img of=floppy.img conv=notrunc

tmp.img:tools/build boot/boot system
        tools/build boot/boot system > tmp.img

仿照2.6或者0.11内核代码中的build.c自己编写个build,这个是完全应用层的代码,可能也是内核中最好理解的代码,这里就不多说了!

3.这个是我早先用的方法,当初为了找个编译镜像的方法,那个累阿。。。。
#其实就是用ld 的功能帮助我们生成2进制文件(我不是太清除这里,可能凡是.text段里的汇编代码都生成纯2进制代码了),当然nasm -f bin显得非常简单。
#这里-Ttext=?要注意下,也可以用0x7c00,但是你编写boot.s和head.s时候就要做一些相应处理,因为编译的时候相关变量的内存偏移地址会不同
all:
        as boot.s -o boot.o
        ld boot.o -o boot -Ttext=0x0000 --oformat binary
        as head.s -o head.o
        ld head.o -o head -Ttext=0x0000 --oformat binary
clean:
        rm boot.o boot floppy.img head.o head img.tmp
dd:
        cp floppy.img.backup floppy.img
        cat boot > img.tmp
        cat head >> img.tmp
        dd if=img.tmp of=floppy.img conv=notrunc

我也在UC上潜水了好长时间,今天发个贴。。。。
有关写os方面的环境搭建问题我可以给出自己的建议(毕竟在这方面我也是痛苦的过来的),现在从0.11转到看2.6代码,对于2.6算是纯新手,也很想和大家交流,这里留个邮箱:
wangxiaochen0@gmail.com
有关自己写os进度:http://hi.baidu.com/saltchen/blo ... c906b9c8eaf4ef.html
另外我这里也收集了很多1W左右的os代码,也有一点心得,欢迎交流

论坛徽章:
0
128 [报告]
发表于 2010-06-15 17:16 |只看该作者
回复 128# chobit_s


    膜拜

论坛徽章:
0
129 [报告]
发表于 2012-04-30 21:36 |只看该作者
佩服!

论坛徽章:
0
130 [报告]
发表于 2012-08-31 17:52 |只看该作者
CU上大牛多多啊.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP