嵌入式驱动day01

1.编写一个简单的驱动代码,在内核态运行的helloworld
   
   
  1. #include <linux/init.h>
  2. #include <linux/module.h>
  3. int __init helloworld_init(void){
  4. printk("hello world\n");
  5. return 0;
  6. void __exit helloworld_exit(void){
  7. printk("bye bye\n");
  8. }
  9. moudle_init(helloworld_init);
  10. moudle_exit(helloworld_exit);
编译helloworld.c
1)把helloworld.c变成zImage的一部分
   复制到内核源码根目录中/deivers/char/(此目录为简单的字符驱动设备)
   Kconfig  
        make menuconfig产生菜单的要素
   Makefile
         每个目录下的Makefile决定了当前目录下的文件(夹)是否要编译进内核
    .config
    vmlinux.lds 
               链接文件
    方式一 :修改vi/dervier/char下的makefile文件
         obj-y :必须编译进内核
         obj-m:编译成模块
    obj-y     +=helloworld.o(Makefile默认找helloworld.c编译)
    方式二;修改Kconfig文件
         vi /dirver/char/Kconfig
  
  
  1. tristate 三态
  2. config HELLO
  3. tristate "helloworld demo"
  4. depends on MACH_CW210||CPU_S5PV210
  5. default y
  6. ----help---
  7. MY first kernel demo!
    obj-$(CONFIG_HELLO)      +=helloworld.o
命令:dmesg 打印内核上电后打印后的信息
    dmesg | grep "hello"  查看内核文件zImage修改结果

2)编译成内核模块
 方式一:1.vi /drivers/char/Makefile 2.Kconfig也一样
    obj-m     +=helloworld.o
    .config中CONFIG_HELLO=m

    make modules 
    会生成.ko文件、/drivers/char/helloworld.ko
    cp drivers/char/helloworld.ko rotfs
    insmod helloworld.ko 安装模块
    rmmod helloworld.ko 卸载模块
    注意会提醒
    helloworld:module license ‘unspecified’ taints kernel
    代码中需要添加
        MODULE_LICENSE("GPL")      模块许可声明
  方式二:
         在自己编写目录下
         vi Makefile
         obj-m     +=helloworld.o
          make -C /opt/kernel M=$(pwd) modules
         -C /opt/kernel 指明内核代码根目录
         M=$(PWD)     指定了要做的动作Makefile
         目录下生成一个.ko文件
    方式三:
         基于第二种
         修改Makefile
         
  
  
  1. KERNELDIR ?= /opt/kernel
  2. obj-m += helloworld.o
  3. default:
  4. /*1*/ $(MAKE) -C $(KERNELDIR) M=$(PWD) module
  5. clean:
  6. /*2*/@rm -f *.o *.ko *.order *.sy* *.mod*
  7. /*1*/:注意一定是table
  8. /*2*/这里@不加存在打印信息,加了就没有打印信息













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值