1.1 LinuxÄÚºËÄ£¿é½éÉÜ1.1.1 LinuxÄÚºËÄ£¿é¸ÅÊö
ǶÈëʽÉ豸Çý¶¯¿ª·¢Öн«Çý¶¯³ÌÐòÒÔÄ£¿éµÄÐÎʽ·¢²¼£¬¸üÊǼ«´óµØÌá¸ßÁËÉ豸ʹÓõÄÁé»îÐÔ¡ª¡ªÓû§Ö»ÐèÒªÄõ½Ïà¹ØÇý¶¯Ä£¿é£¬ÔÙ²åÈëµ½Óû§µÄÄÚºËÖУ¬¼´¿ÉÁé»îµØʹÓÃÄãµÄÉ豸¡£
1.1.2 ʹÓÃLinuxÄ£¿éµÄÓŵã
1. Óû§¿ÉÒÔËæʱÀ©Õ¹LinuxϵͳµÄ¹¦ÄÜ¡£
2. µ±ÒªÐ޸ĵ±Ç°LinuxϵͳµÄÇý¶¯Ê±£¬Ö»ÐèҪжÔؾÉÄ£¿é£¬±àÒëÄ¿±êÇý¶¯Ä£¿é£¬ÖØа²×°²åÈë¼´¿É¡£
3. ϵͳÖÐÈç¹ûÐèҪʹÓÃÐÂÄ£¿é£¬²»±ØÖØбàÒëÄںˣ¬Ö»Òª²åÈëÏàÓ¦µÄÄ£¿é¼´¿É¡£
4. ¼õСLinuxÄں˵ÄÌå»ý£¬½ÚÊ¡flash¡£
1.2 LinuxÄ£¿éÈëÃÅ1.2.1 Ä£¿éÏà¹ØÃüÁî1.2.1.1 LinuxÄ£¿éÃüÁîÏêϸ½éÉÜ
1. Ä£¿é°²×°ÃüÁinsmod
insmod xxxx.ko
2. ²é¿´µ±Ç°ÒѾ°²×°Ä£¿é£ºlsmod
lsmod ²»ÐèÒª²ÎÊý
3. Ä£¿éжÔØÃüÁrmmod
rmmod xxxxx.ko
4. ²é¿´Ä£¿éÐÅÏ¢£ºmodinfo
ÔÚX86ÉϲÙ×÷£º
[root@zhifachen linux-3.5]# modinfo/root/work/rootfs/home/mod/tiny4412_hello_module.ko
filename: /root/work/rootfs/home/mod/tiny4412_hello_module.ko
license: GPL
depends:
intree: Y
vermagic: 3.5.0-FriendlyARM SMP preempt mod_unload ARMv7 p2v8
[root@zhifachen linux-3.5]#
1.2.1.2 LinuxÄ£¿éÃüÁî²âÊÔʾÀý
×¢Ò⣺ģ¿éµÄ±àÒëÊÇÒÀÀµ¾ßÌåÒ»·ÝÔ´Â룬²¢ÇÒÕâ·Ý±»±àÒë¹ý£¬²¢ÇÒûÓÐʹÓÃmrproper£¬distcleanÇå³ýµÄÔ´Â빤³Ì¡£
1.2.2 ʹÓÃmakemodules±àÒëÄÚºËÔ´ÂëÊ÷ÖеÄÄ£¿é
1. Ìí¼ÓÄں˲˵¥
2. make menuconfig ÅäÖÃΪ M
3. ÔÚ¶¥²ãĿ¼ÖÕ¶ËÊäÈëmakemodules
Ö±½Ómake Ò²¿ÉÉú³ÉÄ£¿éÎļþ£¨.ko£©,Ò²»áÉú³ÉzImage£¬µ±ÄãÖ»Ïë±àÒëÄ£¿é¶ø²»Ïë±àÒëzImageʱºòʹÓà make modules ÃüÁî»á¸ü¼Ó¿ìËÙ¡£
1.2.3 °ÑÄÚºËÔ´ÂëÊ÷ÖÐÄ£¿éÔ´Îļþ±àÒëµ½ÄÚºËÓ³ÏñÖÐ
Èç¹û²»ÐèÒªÅäÖò˵¥Ö»Ïë±àÒë´úÂëµ½ÄÚºËzImage£¬Makefile¿ÉÒÔÕâÑùдobj-y += xxxx.o
Èç¹û²»ÐèÒªÅäÖò˵¥Ö»Ïë±àÒë´úÂëΪÍⲿģ¿é£¬Makefile¿ÉÒÔÕâÑùд obj-m+= xxxx.o
1.2.4 ÔÚÄÚºËÔ´ÂëÖÐÌí¼Ó×Ô¶¨ÒåµÄÄ£¿é²¢ÇÒ±àÒë1.2.5 Íⲿ¶ÀÁ¢Makefile±àÒëÄ£¿é
ÔÚÇý¶¯¿ª·¢½×¶Î£¬½Ó´¥µ½ÐÂÇý¶¯»úÂʷdz£¸ß£¬Èç¹û¶¼ÒªÈ¥ÐÞ¸ÄÄÚºËÔ´ÂëMakefile, Ì«¹ýÓÚ·±ÔÓ£¬Ò²²»ÀûÓÚÒÆÖ²£¬Êµ¼Ê¿ª·¢ÖлáʹÓÃÁíÍâÒ»ÖÖ·½·¨À´±àÒëÄ£¿éÎļþ¡£
1.2.5.1 LinuxÄÚºËÄ£¿é´úÂëÎļþÄ£°å
¿ÉÒÔÖ±½Ó¸´ÖÆÄÚºËÔ´ÂëÖÐ×Ô´øµÄʾÀýÄ£°åÀ´²âÊÔ£ºdrivers/char/tiny4412_hello_module.c
1.2.5.2 LinuxÄÚºËÄ£¿é±àÒëMakefileÄ£°å
±àÒëÄ£¿éMakefileÎļþ£º
make -C $(KDIR)M=$(PWD) modules
M=Ñ¡ÏîÈøÃMakefileÔÚ¹¹ÔìmodulesÄ¿±ê֮ǰ·µ»Øµ½Ä£¿éÔ´´úÂëĿ¼£¬È»ºómodulesÄ¿±êÖ¸Ïòobj-m±äÁ¿ÖÐÉ趨µÄÄ£¿é£»ÔÚÉÏÃæµÄÀý×ÓÖУ¬ÎÒÃǽ«¸Ã±äÁ¿ÉèÖóÉÁËmodule.o¡£
ÉÏÃæµÄÇå³ý¹æÔòÊÇ×Ô¼ºÐ´µÄ£¬Ò²¿ÉÀûÓÃÄÚºËMakefileÇå³ý¹æÔòÀ´Çå±àÒëÉú³ÉÄ¿±êÎļþ£¬¸Ä½øºó´úÂ룺
1.1.1 LinuxÄÚºËprintk º¯Êý
ÄÚºËÖв»ÄÜʹÓÃprintfº¯ÊýÊä³öÐÅÏ¢£¬ÒªÊ¹ÓÃprintkº¯Êý£¬Õâ¸öº¯ÊýÓÐÊä³öµÈ¼¶¿ØÖƵġ£
ÄÚºËͨ¹ý printk() Êä³öµÄÐÅÏ¢¾ßÓÐÈÕÖ¾¼¶±ð£¬ÈÕÖ¾¼¶±ðÊÇͨ¹ýÔÚ printk() Êä³öµÄ×Ö·û´®Ç°¼ÓÒ»¸ö´ø¼âÀ¨ºÅµÄÕûÊýÀ´¿ØÖƵģ¬Èç printk("<6>Hello, world!/n");¡£ÄÚºËÖй²ÌṩÁË°ËÖÖ²»Í¬µÄÈÕÖ¾¼¶±ð£¬ÔÚ linux/kernel.h ÖÐÓÐÏàÓ¦µÄºê¶ÔÓ¦¡£
#defineKERN_EMERG "<0>" /* system is unusable ϵͳ²»¿ÉÓÃ*/
#defineKERN_ALERT "<1>" /* action must be takenimmediately¾¯±¨£¬±ØÐëÁ¢¼´²ÉÈ¡Ðж¯*/
#define KERN_CRIT "<2>" /*critical conditionsÁÙ½ç״̬ */
#defineKERN_ERR "<3>" /* error conditions ´íÎó״̬*/
#defineKERN_WARNING "<4>" /* warningconditions¾¯¸æ״̬*/
#defineKERN_NOTICE "<5>" /* normal but significantÕý³£µÄ£¬µ«ÒýÈËעĿ*/
#define KERN_INFO "<6>" /*informational ÐÅÏ¢*/
#defineKERN_DEBUG "<7>" /* debug-level messagesµ÷ÊԵȼ¶ÐÅÏ¢ */
¿ÉÒÔͨ¹ý ²é¿´/proc/sys/kernel/printk ÎļþÄÚÈÝÖªµÀÉèÖÃÐÅÏ¢¡£
[root@ChenZhiFa/]# cat /proc/sys/kernel/printk
7 4 1 7
¿ÉÒÔͨ¹ýecho ÃüÁîÐÞ¸ÄÖÖ¸öµÈ¼¶£º
[root@ChenZhiFa/]# echo 4 4 1 7 > /proc/sys/kernel/printk
˵Ã÷£ºÖ±½ÓʹÓÃprintk( ¡°kkkk¡±); ÕâÑùûÓÐÖ¸Ã÷µÈ¼¶£¬ÕâÖÖδÃ÷È·Ö¸¶¨¡£
Ö»Óеȼ¶±È½Ïµ±Ç°Öն˵ȼ¶¸ß²Å»áÔÚÖÕ¶ËÉÏÏÔʾ³öÀ´¡£
ÒÔϽøÐÐX86 ϵͳÉϵIJâÊÔ£¨ÔÚ´¿×Ö·û½çÃæϲâÊÔÓÐЧ£¬ÔÚͼÐνçÃæÖÐÊÇÎÞЧ£©
ÔÚͼÐνçÃæϵͳÖа´ Ctl + Alt + F2 (F2~F6¼üÆäÖÐÒ»¸ö£¬²»Í¬µçÄÔ¿ÉÄܲ»Í¬)£¬¿ÉÒÔ½øÈëµ½´¿×Ö·û½çÃ棬Ҫ·µ»Ø°´Ctl +Alt + F1£¨²»Í¬µçÄÔ¿ÉÄܲ»Í¬£©
printk --- ²»Ö§³Ö¸¡µãÊý£¬Êµ¼ÊÉÏÇý¶¯³ÌÐòÒ²²»Ö§³Ö¸¡µãÔËËã¡£ËùÓи¡µãÔËËãÓ¦¸Ã·ÅÔÚÓû§¿Õ¼ä¡£