mooc-linux内核课-1

1准备

int func1(int x)
{
    return (x+3);
}
int calc(int x)
{
    return func1(x);
}
int main(void)
{
    return calc(32)+1;
}

反汇编编译
gcc -S -o dis_test.s dis_test.c -m32
其中-m32是因为:
在64位的机器上编译32位还是62位程序,主要是要编译器和链接器上加上参数据:-m32 (编译32位) -m64(编译64)

.file"dis_test.c"
.text
.globlfunc1
.typefunc1, @function
func1:
.LFB0:
.cfi_startproc
pushl%ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl%esp, %ebp
.cfi_def_cfa_register 5
movl8(%ebp), %eax
addl$3, %eax
popl%ebp
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE0:
.sizefunc1, .-func1
.globlcalc
.typecalc, @function
calc:
.LFB1:
.cfi_startproc
pushl%ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl%esp, %ebp
.cfi_def_cfa_register 5
subl$4, %esp
movl8(%ebp), %eax
movl%eax, (%esp)
callfunc1
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE1:
.sizecalc, .-calc
.globlmain
.typemain, @function
main:
.LFB2:
.cfi_startproc
pushl%ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl%esp, %ebp
.cfi_def_cfa_register 5
subl$4, %esp
movl$32, (%esp)
callcalc
addl$1, %eax
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE2:
.sizemain, .-main
.ident"GCC: (Ubuntu 4.8.2-19ubuntu1) 4.8.2"
.section.note.GNU-stack,"",@progbits

它主要是把/init/main.c
start_kernel()里边添加了my_start_kernel()名字无所谓,只是在运行init开始前,借用这个环境运行自己的任务。

timer_interrupt中添加自己的timer isr:

arch/x86/kernel/time.c

 static irqreturn_t timer_interrupt(int irq, void *dev_id)
 {
    global_clock_event->event_handler(global_clock_event);
+    my_timer_handler();
    return IRQ_HANDLED;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值