您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > LINUX内核模块编程指南
1Hello,World()Hello,WorldSalut,Mundiinit_modulecleanup_moduleinit_module()cleanup_moduleinit_module1.1Makefiles-c•__KERNEL__•MODULE•LINUXLINUX/usr/include/linux/config.h•__SMP__(CPU)(12)•CONFIG_MODVERSIONSCONFIG_MODVERSIONS/usr/include/linux/modversions.h(root)helloinsmod/proc/modulesMakefileXinsmodprintkX146Linux(Alt-Fn)Xxterm-C7XXXprintkXprintk(xterm-C)CPUXXCPU1.21)#define__NO_VERSION__module.hkernel_version(kernel_version)version.h__NO_VERSION__module.h2)3)x86ld-melf_i386-r-o.o().o().o1Hello,World147148Linux2(/dev)proc()/proc/devices/devls-l/dev/hd[ab]*IDE3PCLinuxmknod/dev()ls-lbcinit_modulemodule_register_chrdevcleanup_module()device_actionfile_operationsFops(/)()cleanup_modulevoidcleanup_module(/proc/modules)rmmodmod_use_count_(MOD_INC_USE_COUNTMOD_DEC_USE_COUNT)mod_use_count_150Linux2151152Linux2153154Linux2155156LinuxLinux(n..m)(n..m)()(m)MPGLinux2.0.x2.2.xLINUX_VERSION_CODEa.b.c216a+28b+cKERNEL_VERSION2.0.3521573/procLinux/proc/proc()/proc/proc/modules/proc/meminfo/proc/proc(/proc)init_modulecleanup_moduleproc_register_dynamic(/proc)(inode)MOD_INC_USE_COUNTMOD_DEC_USE_COUNT/proc3/proc159160Linux3/proc1614/procmknod/proc/procprocproc_dir_entry/procLinuxLinuxinode_operationsfile_operations/procinode_operationsinode_operationsfile_operationsfile_operationsmodule_inputmodule_outputmodule_permission/procuid(uidcurrentcurrent)module_permissionput_userget_userLinux(Intel)put_userget_user4/proc163164Linux4/proc165166Linux4/proc167168Linux4/proc1695Linuxdevice_write(CPU)()()Unixioctl(ioctl)ioctlioctl()ioctl()ioctlioctlioctlioctlioctl(_IO_IOR_IOW_IOWR)ioctl#includeioctlchardev.hioctl.cioctlioctlioctlioctlDocumentation/ioctl-number.txt5171172Linux5173174Linux5175176Linux5177178Linux5179180Linux51816/procioctlUnixLinuxUnixLinuxargcargvinsmodstr1str2insmodstr1=xxxstr2=yyyinit_modulestr1xxxstr2yyy2str1str22.2MACRO_PARMinsmod6183184Linux7/procopeninsmodrmmodsync/proc()stracecommandargumentsCPU()()IntelCPU0x80system_call()(sys_call_table)()arch/architecture/kernel/entry.SENTRY(system_call)()sys_call_tablecleanup_modulesys_call_tableprintkour_sys_openuid(ID)uidprintkuiduidopeninit_modulesys_call_tablecleanup_moduleABAA_openBB_openAA_opensys_openBB_openA_openBA_openA_openABAsys_open,B_openBBA_openA_open(B)AB_openA_openAsys_openB_openA_openA_openBsys_opensys_open/proc/ksymsrmmod186Linux7187188Linux71898(CPU)(/proc/sleep)module_interruptible_sleep_onTASK_INTERRUPTIBLE()WaitQWaitQCPUmodule_close()CPUCPUmodule_interruptible_sleep_onCPUmodule_closeCtrl+C(SIGINT)EINTRO_NONBLOCKEAGAINcat_noblockO_NONBLOCK8191192Linux8193194Linux8195196Linux8197198Linux9printk1Xttyttycurrentcurrentttyttytty200Linux9printk20110crontabcrontabcrontabtq_structqueue_tasktq_timertq_timerrmmod0module_cleanup()cleanup_module(void)sleep_onmodule_sleep_onrmmodrmmod10203204Linux10205206Linux1110ioctlCPUCPUCPUCPURAMLinuxIRQ(InterruptRequest)IRQIRQIRQ()IRQCPU(CPU)()request_irqIRQ(Intel16IRQ)request_irqIRQ/proc/interruptsSA_SHIRQSA_INTERRUPTIRQ(IRQ)IRQIRQrequest_irqtq_immediatemark_bh(BH_IMMEDIATE)queue_task_irq2queue_taskqueue_taskmark_bhLinux32(BH_IMMEDIATE)IntelIntelIntel(drivers/char/keyboard.c)insmodsleep120;rebootIRQ1IntelIRQ1IRQ(inb(0x64))got_char()(0)(1)208Linux11209210Linux12()CPUCPU()CPU(SMP)LinuxCPUCPUCPUCPUCPUCPU2.0.x(spinlock)CPUCPU()CPUCPULinuxSMP2.2.xCPUSMP131)/proc/ksyms2)3)A2.02.2(EmmanuelPapirakis)()~rgooch/linux/docs/porting_to_2.2.html.1)asm/uaccess.hput_userget_user#include2)get_user2.2get_user2.2get_userget_user3)file_operationsopenclose4)file_operationsclose2.2close5)file_operationsreadwrite2.2ssize_t6)proc_register_dynamicproc_register07)32_NSIG_WORDS8)queue_task_irqqueue_taskqueue_task_irq9)2.2MODULE_PARM10)SMPB(Linux)~jmseyas/linux/kernel/hackers-docs.htmlLinusPhrackPhrackGPLCGNU•OriPomerantzApt.#10322355NHwy360GrandPrairie,TX75050USA•()GPLLinuxPerl•()•
本文标题:LINUX内核模块编程指南
链接地址:https://www.777doc.com/doc-6440085 .html