| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5150 人关注过本帖
标题:linux下研究linux系统内核 环境搭建
只看楼主 加入收藏
朱大哥
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:72
专家分:123
注 册:2015-1-16
结帖率:22.22%
收藏
 问题点数:0 回复次数:6 
linux下研究linux系统内核 环境搭建
所需的材料
安装一个linux操作系统(虚拟机的不要)   我用的centos 7 此版本对比centos 6来说运行起来更流畅了
virtualbox软件一个  (创建一个电脑后,不会添加软板映像的  请百度 virtualbox如何添加软盘)
编译器软件 nasm     (百度到官网去下载)

软盘映像制作
命令1:
touch flopy.img  
命令意思就是在当前目录下建立一个名叫flopy.img 的文件
命令2:
dd if=/dev/zero of=flopy.img  bs=512 count=2880
命令的意思就是往名为flopy.img文件里写入512*2880字节的0   磁盘容量为1.44M 这样就建立了一个软盘映像


源代码在下面


程序代码:
start:
    mov ax,0x7c0
    mov ds,ax
    mov ax,0x9000
    mov es,ax
    xor si,si
    xor di,di
    mov cx,512
    rep movsb
    jmp 9000h:go
go:
    mov ax,cs
    mov es,ax
    mov ds,ax

    mov ax,BootMessage
    mov bp,ax
    mov cx,16
    mov ax,01301h
    mov bx,000ch
    mov dl,0
    int 10h
    jmp $
BootMessage: db "Hello, OS world!"
times 510-($-$$)db 0
dw 0xaa55

  敲好源代码后 保存为 boot.asm
在命令行输入
命令1     nasm boot.asm -o boot.bin
命令2     dd if=boot.bin  of=flopy.img   bs=512 count=1
启动virtualbox 开启你的电脑就能看到hello,Os world了

   
搜索更多相关主题的帖子: 源代码 百度 linux 虚拟机 编译器 
2015-11-01 20:34
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
用int10的,这是实模式下最原始的显示中断,只要接管了磁盘引导区代码就可以做到,应该和linux无关吧。

能编个毛线衣吗?
2015-11-04 20:25
nooomoon
Rank: 1
等 级:新手上路
帖 子:13
专家分:5
注 册:2015-9-2
收藏
得分:0 
还看不太懂。不是0x07c00?少了一个零吧。
启动要首先是软盘512K字节载入内存0x07c00。然后指针指向这个地址。
这个程序进入之后。把这个东西拷到0x9000然后再执行。最后一个jmp $是啥?jmp到哪里?也不懂。

2015-11-06 13:34
朱大哥
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:72
专家分:123
注 册:2015-1-16
收藏
得分:0 
回复 3楼 nooomoon
07c00是一个物理地址
物理地址在是模式下是 段基地址:偏移地址
偏移地址=0
段基地址:0=07c00
段地址=?

2015-11-06 14:02
朱大哥
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:72
专家分:123
注 册:2015-1-16
收藏
得分:0 
回复 2楼 wmf2014
大部分的人在环境搭建上就被难住了 ,所以弄了这么个开始
2015-11-06 14:04
朱大哥
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:72
专家分:123
注 册:2015-1-16
收藏
得分:0 
#include <stdio.h>
int main()
{
    int n,m=0x80000000;
    scanf("%d",&n);
    while(m){
        if(m&n)
            printf("1");
        else
            printf("0");
        m>>=1;
    }
}
2015-11-06 15:29
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:0 
Linux的内核中底层会用到AT&T的汇编语言,gas汇编器。既然时学习Linux内核,为什么不一开始就学习用gas汇编器呢?

下面附上汇编源代码:
程序代码:
    .code16
    .section .text
    .global _start
_start:
    movw %cs, %ax
    movw %ax, %ds
    movw %ax, %es
    call DispStr
loop1:
    jmp loop1

DispStr:
    movw $BootMessage, %ax
    movw %ax, %bp
    movw $0x10, %cx
    movw $0x1301, %ax
    movw $0xc, %bx
    movb $0x0, %dl
    int $0x10
    ret

BootMessage:
    .ascii "Hello, OS world!"
    .org 510
    .word 0xAA55
下面附上Makefile文件:
程序代码:
boot.img:boot
    dd if=/dev/zero of=boot.img bs=1474560 count=1
    dd if=boot of=boot.img  bs=512 count=1 conv=notrunc
boot:boot.o
    ld boot.o -m elf_i386 --oformat binary -Ttext=0x7c00 -o boot
boot.o:boot.S
    as boot.S --32 -o boot.o
clean:
    rm -rf boot.o boot boot.img

nasm什么的编译器都可以扔掉了。既然是内核学习,就应该用bochs,visualbox能看到寄存器的值么?
2015-11-15 01:14
快速回复:linux下研究linux系统内核 环境搭建
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.093871 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved