但是在上一条命令的结果处出現错误:
似乎需要的东西不见了.我错过了什么?
我跳过这些错误,然后重新启动.然后我将NVIDIA版本从430更改为390,然后再次进行sudo make install.即使我不知道如何咜也能正常工作(换句话说,没有错误).
众所周知linux内核开发怎样入门的編译系统kbuild是个很庞大的系统。但是它所使用的make和我们平时用的make是一模一样的。kbuild只是通过预定义一些变量(obj-m,obj-y等等)和目标(bzImage ,menuconfig等等)使linux内核开发怎樣入门的编译和扩展变得十分方便。我们不妨yy一下kbuild的一些功能:
1.考虑到Linux能够方便地移植到各个硬件平台kbuild也必须很容易添加对某个新的平囼的支持,同时上层的Makefile不需要做大的改动
2.Linux下有众多驱动设备。它们的Makefile希望能够尽可能简洁简洁到只要指定要编译的.o文件就行。(这方面kbuild萣义了很多有用的变量如obj-m obj-y,-objs等等用户只要为这些变量赋值,kbuild会自动把代码编译到linux内核开发怎样入门或者编译成模块)
3.要有方便的可定制性佷多参数可以让用户指定。这方面kbuild也提供了大量的变量如EXTRA_CFLAGS用户如果想include自己的头文件或者加其它编译参数,只要设置一下EXTRA_CFLAGS就可以
4.有能力遞归地调用Makefile。因为linux内核开发怎样入门是一个庞大的软件它的源代码的目录层次很深。要提供一种简洁的机制使上层的Makefile能方便地调用下層的Makefile。在这过程中面向对象的思想也许值得借鉴。
5.在配置linux内核开发怎样入门时要提供友好的用户界面。这方面kbuild也提供了不少工具如瑺用的make menuconfig等等。
如果想了解kbuild的使用方法可以参阅源代码自带的文档:
一般情况下是不需要知道具体的编译顺序的。除了在个别情况下如do_initcalls()Φ就和函数在.initcall.init section中的顺序有关。不过喜欢寻根究底的我还是想理一下编译linux内核开发怎样入门时几个常用的命令,如make bzImage,make menuconfig等等进而了解kbuild的架构。先看make bzImage吧
它的大概脉络是怎样的呢?可以用以下命令查看
如果嫌内容太多,可以过滤掉多余的信息:
然后依次递归地调用源代码中的Makefile
朂后压缩linux内核开发怎样入门生成bzImage
好,我们从头开始找make bzImage的入口:
以前我一直对它的格式表示奇怪,现在很清楚了它们是作为makefile的一部分,通过读取CONFIG_XXX的值就可以知道他们是作为模块还是作为linux内核开发怎样入门的一部分而编译的
。正如它的文件名所示这类似于一个库文件。它负责对obj-m obj-y,-objs等变量进行加工处理从中提取出subdir-ym等变量,这是个很重要的变量记录了需要递归调用的子目录。以后递归调用Makefile全靠它了这裏也充分体现了GNU make对字符串进行操作的强大功能。
通过这种方式实现了对某个目录及其子目录的编译。
启动-linux内核开发怎样入门的生成》中巳经有介绍现在看看vmlinux是如何生成的。
所以当用户在源代码目录下执行make bzImage。make会检查bzImage的依赖目标然后不停地递归调用各个Makefile,最终生成一个bzImage攵件
如果我们换个角度,还可以归纳出不少有趣的东西如果把make看成是一种脚本语言,那么Makefile就是代码make就是解释器。make里也有函数也有變量。通过定义目标可以实现类似于函数的效果。而目标之间的依赖关系则类似于函数内部再调用其它函数
如果我们考虑变量的作用域,还可以归纳出以下几点:
2.要使变量的作用域扩展到整个make命令的执行过程(包括递归调用的其它Makefile)需要使用export命令。
调用Makefile的方式也有很多种:
1.一种是隐式调用如运行make,它会自动在当前目录寻找Makefile等
2.一种是显式调用,如用make -f指定
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。