📄 00000002.htm
字号:
<BR>#ifdef CONFIG_PCI <BR> case PROC_PCI: <BR> return get_pci_list(page); <BR>#endif <BR> <BR> case PROC_CPUINFO: <BR> return get_cpuinfo(page); <BR> <BR> case PROC_VERSION: <BR> return get_version(page); <BR> <BR>#ifdef CONFIG_DEBUG_MALLOC <BR> case PROC_MALLOC: <BR> return get_malloc(page); <BR>#endif <BR> <BR>#ifdef CONFIG_MODULES <BR> case PROC_MODULES: <BR> return get_module_list(page); <BR> <BR> case PROC_KSYMS: <BR> return get_ksyms_list(page, start, offset, length); <BR>#endif <BR> <BR> case PROC_STAT: <BR> return get_kstat(page); <BR> <BR> case PROC_DEVICES: <BR> return get_device_list(page); <BR> <BR> case PROC_INTERRUPTS: <BR> return get_irq_list(page); <BR> <BR> case PROC_FILESYSTEMS: <BR> return get_filesystem_list(page); <BR> <BR> case PROC_DMA: <BR> return get_dma_list(page); <BR> <BR> case PROC_IOPORTS: <BR> return get_ioport_list(page); <BR>#ifdef CONFIG_BLK_DEV_MD <BR> case PROC_MD: <BR> return get_md_status(page); <BR>#endif <BR>#ifdef __SMP_PROF__ <BR> case PROC_SMP_PROF: <BR> return get_smp_prof_list(page); <BR>#endif <BR> case PROC_CMDLINE: <BR> return get_cmdline(page); <BR> <BR> case PROC_MTAB: <BR> return get_filesystem_info( page ); <BR>#ifdef CONFIG_RTC <BR> case PROC_RTC: <BR> return get_rtc_status(page); <BR>#endif <BR>#ifdef CONFIG_TESTPROC <BR> case PROC_TEST: <BR> return get_test_status(page); <BR>#endif <BR> case PROC_LOCKS: <BR> return get_locks_status(page); <BR> } <BR> return -EBADF; <BR>} <BR> <BR>这段程式我们不需要解释了吧! 如果各位有兴趣看看核心是如果由档案系统 连结到这 <BR>个函数的过程,请看下一节的说明。接下来我们就看一下,我们所 加入的 <BR>get_test_status这个函数的内容。通常这个函数应该位於驱动程式或 核心之中,所以 <BR>我把它放在drivers/char之中,这个位置只是一个任意的选 择,没有其它的意义,你 <BR>可以因自已的需要做不同的选择。 <BR> <BR>我将档案的名称取做testproc.c,内容是 <BR> <BR>#include <BR> <BR>int get_test_status(char *buf) <BR>{ <BR> char *p; <BR> <BR> p = buf; <BR> <BR> p += sprintf(p,"test status\n"); <BR> return p - buf; <BR>} <BR> <BR>这个程式好像....好像....太简单了一点吧,不过如果你去找一下其它的函数,结 构 <BR>几乎是一样的,我们只要将字串或任何资料填入buf之中,并且将实际的长度传 回即 <BR>可。因为buf是一个传入的缓冲区,那一定有长度的限制吧! 当然有,它的长 度是一个 <BR>记忆体页的长度,在X86中就是4096个位元组。超过了可能会毁了核心, 一定要小心。 <BR> <BR>至此整个工作已经完成,但如果你此时就去做编译核心的工作,你会得到一个 <BR>'get_test_status undefined'的错误,这是因为我们并没有告诉核心多了testproc 这 <BR>个档案。我们必须修改在drivers/char中的Config.in和Makefile二个档案,在 <BR>Config.in中加入 <BR> <BR>bool 'Test proc' CONFIG_TESTPROC <BR> <BR>这会让我们在做make menuconfig或make config时会多出一个选项,让我们可以设定 <BR>是否要加入这个功能。还记得前面的码吗? 所有的码都被放在 <BR> <BR>#ifdef CONFIG_TESTPROC <BR> <BR>#endif <BR> <BR>之间。但testproc.c这个档案如何加入呢? 这个要靠在Makefile中加入 <BR> <BR>ifeq ($(CONFIG_TESTPROC),y) <BR>L_OBJS += testproc.o <BR>endif <BR> <BR>你可以看到只有在CONFIG_TESTPROC被选择的情况下testproc.c才会被编译且 连结至核 <BR>心之中。至此你便可以重新建立一个核心了,记得在编译前先执行 make menuconfig并 <BR>将CONFIG_TESTPROC的选项打开。 <BR> <BR>遥远的行程 <BR> <BR>[未完成.....] <BR> <BR>加入一个子目录 <BR> <BR>[未完成....] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -