在內核中添加本身的代碼:

/**************************************************************************************/
內核源碼的查看方法:
    1.刪除linux-3.5-for-look/arch/arm/所無關於三星的代碼。由於這個內核支持的芯片比較多,咱們學得是arm,查詢的時候防止查詢到其餘平臺的代碼,因此精簡一下代碼。
    2.ctags -R .
    3.vim -t memcpy
    4.vim 命令行模式下:cstag memcpy
    5.ctrl + ] :進入
    6.ctrl + o :退出

/**************************************************************************************/
在內核中添加本身的代碼:
    1.驅動能夠直接編譯到內核。
    2.或者編譯成模塊,而後須要的時候在安裝。
    3.mkdir linux-3.5/Driver/mydriver
    4.建立一下幾個文件:my.c Makefile
    my.c中代碼:
          1 #include <linux/init.h>
          2 #include <linux/module.h>
          3 #include <linux/sched.h>
          4 //在內核啓動過程當中執行,且在內核啓動過程當中執行的函數類型是固定的:int test_init(void) :返回值和行>>
            參是固定的。
          5 //init 段:這個函數被放到init段,好處是代碼執行完成以後,函數體就釋放了,節省一部份內存。只能調用>>
            一次。後面不要調用了。
          6 static __init  int test_init(void)
          7 {
          8         int i;
          9         //若是資源申請失敗,要飯會相應的錯誤嗎
         10         //      
         11         //return -ENOMEM;內存申請失敗
         12         for(i=0;i<20;i++)
         13         {
         14                 printk("hello kernel\n");
         15         }
         16                 //printf("") //>> 1
         17         return 0;
         18
         19 }
         20 //把test_init函數放到內核啓動過程當中執行
         21 module_init(test_init);
         22 MODULE_LICENSE("GPL"); //這個是代碼遵循GPL開源規則,之後誰要是用了咱們寫的代碼,也必需要遵循GPL規則。
         23 //下面三行無關緊要
         24 MODULE_AUTHOR("LIUYE");
         25 MODULE_VERSION("V1.0");    
            26 MODULE_DESCRIPTION("test for class");

    Makefile:
        obj-y += my.o
    vim ../Makefile 上一層makefile中添加下層Makefile的信息,makefile是分層編譯的結構,上層malefile記錄下層的makefile信息,才能正確編譯。
        obj-y += mydriver/     這裏必定要有「/」,由於這裏是一個目錄
    以後就可退出到linux-3.5/ make -j4
        [liuye@LiuYe linux-3.5]$>make -j4
          CHK     include/linux/version.h
          CHK     include/generated/utsrelease.h
        make[1]: 'include/generated/mach-types.h' is up to date.
          CALL    scripts/checksyscalls.sh
          CHK     include/generated/compile.h
          CC      drivers/mydriver/my.o
          LD      drivers/mydriver/built-in.o
          LD      drivers/built-in.o
          LINK    vmlinux
          LD      vmlinux.o
          MODPOST vmlinux.o
        WARNING: modpost: Found 9 section mismatch(es).
        To see full details build your kernel with:
        'make CONFIG_DEBUG_SECTION_MISMATCH=y'
          GEN     .version
          CHK     include/generated/compile.h
          UPD     include/generated/compile.h
          CC      init/version.o
          LD      init/built-in.o
          KSYM    .tmp_kallsyms1.o
          KSYM    .tmp_kallsyms2.o
          LD      vmlinux
          SYSMAP  System.map
          OBJCOPY arch/arm/boot/Image
          Kernel: arch/arm/boot/Image is ready
          GZIP    arch/arm/boot/compressed/piggy.gzip
          AS      arch/arm/boot/compressed/piggy.gzip.o
          LD      arch/arm/boot/compressed/vmlinux
          OBJCOPY arch/arm/boot/zImage
          Kernel: arch/arm/boot/zImage is ready
          Building modules, stage 2.
          MODPOST 3 modules
    能夠看到咱們的代碼被編譯而且連接了。以後更換zImage到SD卡,刷機,只須要刷zImage就能夠了。
        [    3.225000] usbhid: USB HID core driver
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] hello kernel
        [    3.225000] Samsung Audio Subsystem Driver, (c) 2011 Samsung Electronics
        [    3.225000] audss_init: RCLK SRC[busclk]
        [    3.225000] Samsung SRP driver, (c)2011 Samsung Electronics
        [    3.310000] mmcblk0boot1: mmc0:0001 M4G1YC partition 2 2.00 MiB
    能夠看到咱們的代碼在內核啓動過程當中就已經運行了。
/**************************************************************************************/linux

相關文章
相關標籤/搜索