前面的实验楼给的操作步骤,不再赘述
mykernel里的mymain.c下面的这段代码
void _init my_start_kernel(void)
{
int i=0;
while(1)
{
i++;
if(i%100000==0)
printf(KERN_NOTICE"my_start_kernel here %d
",i);
}
}
很明显这是内核的启动函数,while循环里每执行10万次,然后输出一行,如下图
当我们把10万,修改成100万,然后make一下,就会发现,输出的频率就不一样了,如下图
下面再看看 myinterrupt.c里的代码, 根据注释也知道,这是调用时钟中断了,然后输出一条语句
根据庖丁解牛上的二维码9给的地址,我们更新一下,上面的几个mymain.c,myinterrupt.c ,mypcb.c
然后make一下,然后输出一下,如下图。感觉和没更新前,好像没什么区别
更正
上次说没有变化,应该是编译错误了,执行的是没改之前的mykernel
经过反复查找,问题被定位在mypch.h
删除 #unsigned long
/*
* linux/mykernel/mypcb.h
*
* Kernel internal PCB types
*
* Copyright (C) 2013 Mengning
*
*/
#define MAX_TASK_NUM 4
#define KERNEL_STACK_SIZE 1024*2 # unsigned long
/* CPU-specific state of this task */
struct Thread {
unsigned long ip;
unsigned long sp;
};
typedef struct PCB{
int pid;
volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
unsigned long stack[KERNEL_STACK_SIZE];
/* CPU-specific state of this task */
struct Thread thread;
unsigned long task_entry;
struct PCB *next;
}tPCB;
void my_schedule(void);