Linux 嵌入式开发记录(一) .config kconfig makefile

        做嵌入式开发十多年了,什么都干过,不算好,也不算坏,回过头来,感觉啥都没干,于是心血来潮,把这么多年来的工作整理成文,每天发布一篇,记忆过往。

        什么时候开始写的第一个linux 驱动,已经记不起来了,只感觉当时非常乱。只知道怎么写一个驱动代码,但是,这个代码要怎么样才能进入我们的arm板,对一个初写驱动的人来说,有时还真有点乱,好吧,就是乱。

        现在,我们把驱动的需求给列出来,没错,我们先要列出需求,然后再考虑怎么去实现,对大多数驱动来说,嗯,基本都是这些需求。

        1、怎么样让我们的驱动在我们的Arm板上跑起来?

        没错,写的驱动必须要在目标机上跑。那么什么样的驱动才能在我们的目标机上跑起来呢?对arm 版来说,必须是由芯片厂商发布的交叉编译工具编译出来的驱动才能在我们目标机上跑,你如果用其他的编译工具编译的一般情况是跑不了的,所以请注意,首先你需要相应的编译工具。然后编译你的驱动,然后才能跑。

        2、怎么把驱动编译成内核,怎么把驱动编译成模块,还是不编译这个驱动?

        对于驱动来说,有二种形式存在系统,一种是编译进内核,这个时候,我们在应用层或者脚本就不用管理他们了,我们只需要在应用层调用即可。另外一种是编译成模块,编译成模块的驱动,我们是需要调用insmod 来进行插入的,否则你是没办法用这个驱动的。讲到编译进内核,模块,还是不编译,你是不是很快就回想到,在我们进行内核裁剪的时候,我们使用make menuconfig 然后调出一个界面,在这个界面就可以进行操作了,没错,就是make menuconfig,然后就可以操作了。首先,我们要知道make menuconfig 这个操作为啥会出一个界面,为啥会出界面里面的那些内容,它总不会从天而降。其实make menuconfig 在配置内核的时候,他会去读kconfig 文件,kconfig文件里面 就描述了界面上的那些菜单项。所以我们需要把我们的驱动也显示在这个菜单上面,那么我们就得有这么一个 kconfig ,这个kconfig 有一项是用来描述我们这个驱动的。使用make menuconfig 配置完成后,他会生成一个  .config 文件。那么问题来了,在kconfig 中我配置成编译进内核还是编译成模块,它在 .config 中有什么不同吗?当然不同了,要不怎么会一个进了内核,一个成了模块!但是他们的差别非常的少,嗯,非常的少,就是一个是 m 一个是y .比如我们写了一个简单的测试驱动我们在 kconfig 中 给他 定义为  config  MY_TEST_DRIVE .如果我们把选定为编译成模块,那么在.config 文件中就会有这么一项  CONFIG_MY_TEST_DRIVE = m;  如果我们把选定为编译进内核,那么在.config 文件中就会有这么一项 CONFIG_MY_TET_DRIVE = y; 到现在为止,嗯,跟我们的驱动还没直接关系,对现在为止,只是生成了一些配置文件。我们要生产我们的驱动,那么一定是需要 make 的。 make , make 会去找谁呢,当然是找 makefile . 这个时候我们的另外一个主角 makefile 等场了,makefile 才是一个跟我们写的驱动代码直接关联的一个角色,前面我们讲的kconfig ,.config 都是远房亲戚。想一想,既然makefile 最终由他来确定我们的驱动程序,那么他把这个驱动时编译内核还是编译成模块呢?它肯定需要知道,谁告诉他呢,还记得他得远房亲戚  .config 么,一个m 一个y 得那个远房亲戚。所以我们在 makefiel 里面就需要用它  obj-$(CONFIG_MY_TEST_DRIVE)  +=my_test.o.  嗯。至此我们得驱动就出生了。

        我们再回过头来,继续走一遍,我们写了一个 驱动文件  my_test.c ,我们需要把它编成一个我们目标机上能跑得驱动,那么我们需要相应得编译工具。有了这个相应得工具后,我们需要为它写一个makefile .来进行编译。makefile 需要知道它到底是编译成内核还是模块,于是,它需要去找.config . 嗯,.config 它怎么来得呢,它是由 make menuconfig 配置得时候候,通过读取kconfig 信息生成的。

        

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dreamliweiming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值