"); //-->
本章导读
在前面入门视频第十期“搭建编译环境 uboot_linux_Android”中,只介绍了输入 Make命令就可以编译出内核,并没有介绍它是如何运行的。
在向内核中添加驱动的时候要完成 3 项工作,包括:
1)在 Kconfig 中添加新代码对应项目的编译条件,这一部分在实验 3 已经介绍过;
2)将驱动源码添加到对应的目录中,这一步比较好理解,在本章实验中将给大家演示一下;
3)在目录 Makefile 中文件中增加针对新代码的编译条目,这一部分将在本章节介绍到。
4.1.1 工具
4.1.1.1 硬件工具
1)PC 机
4.1.1.2 软件工具
1)虚拟机 Vmware
2)Ubuntu12.04.2
3)Ubuntu 系统下解压生成的 Linux 源码
4.1.2 预备课程
入门视频“01-烧写、编译以及基础知识视频”
→“实验 10-搭建编译环境 uboot_linux_Android”或者使用手册“五 Android 开
发环境搭建以及编译”;
实验三 Menuconfig_Kconfig
4.1.3 视频资源
本节配套视频为“视频 04_Makefile 编译”
4.2 学习目标
本章需要学习以下内容:
掌握 Linux 内核编译命令
掌握编译器路径设置的方法
理解环境变量路径、编译器、源码 Makefile 文件中编译器路径三者之间的关系
理解 Makefile 文件结构
掌握向 Makefile 文件中添加脚本命令的方法,能够看懂 Makefile 脚本
4.3 编译器路径的设置
在前面入门知识中,只介绍了在什么目录解压编译器,在环境变量文件中添加路径,就可以编译出内核,并没有介绍他们之间是如何对应的。
如下图所示,按照前面提供的基础教程,配置好 Ubuntu 中的编译器和库文件,输入命令“#make”,就可以编译生成内核的二进制镜像。
如下图所示,使用命令“#cd”,使用命令“#vim .bashrc”打开环境变量文件“.bashrc”。
如下图所示,进入最底行,可以看到,在环境变量文件中编译器路径设置为“exportPATH=$PATH:/usr/local/arm/arm-2009q3/bin”。
然后使用命令“#cd /usr/local/arm/”,进入解压编译器“arm-2009q3.tar.bz2”的文件目录。
可以明显的看到,环境变量中设置的路径和解压的路径是对应的。
这里回到内核源码的目录,如下图所示。
如下图所示,使用命令“#vim Makefile”打开内核目录下的 Makefile 文件。
这里通过 vim 编辑器查找参数“CROSS_COMPILE”,如下图所示。
可以查到参数“CROSS_COMPILE”,如下图所示。
如上图所示,可以看到这个参数是“/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-”。
再看一下参数“CROSS_COMPILE”的下一行,可以看出这里有修改过的痕迹。很容易推断出,原来三星是用的“4.5.1”版本的编译器,不过这个没关系,只要能编译通过就可以了。
一般说来,拿到源码之后的第一步,是要先要先将源码编译通过。
设置上图中的变量“CROSS_COMPILE”以及环境变量还有编译器实际解压路径三者对应。这三者对应之后,就能确保执行 Make 命令之后,系统能够找到这个编译器。
在编译命令执行的过程中,会提示一些错误,然后根据提示的错误,挨个去排查修改,去添加库文件或者修改库文件。这个过程有长有短,考验的只是耐心,并没有太多技巧。由于已经将缺少的库文件写成脚本,这样大家在编译器执行以下脚本就能够编译通过。
针对内核目录下的 Makefile 文件,提醒大家一下,这个文件中内容很多,除了上面编译器路径变量以外的其它部分几乎不用关注。
另外还有一个地方需要了解一下,如下图所示,在该文件的第一行,可以看到内核的版本。
4.4 Make 内核编译命令执行过程简介
如下图所示,编译内核需要执行 make 命令,在执行 make 命令之后,并没有介绍它是如何执行的。
在 make 命令执行之后,它会首先找到当前目录下的“Makefile”文件,如下图所示。
运行 Makefile 文件之后,它会在 Makefile 文件中找到编译器的路径“/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-”如下图所示。
然后系统根据环境变量找到“export PATH=$PATH:/usr/local/arm/arm-2009q3/bin”编译器的路径,如下图所示。
如下图所示,使用命令“ls /usr/local/arm/arm-2009q3/bin/”可以查看到 arm2009q3解压之后有哪些具体编译器。
如上图,系统找到编译器之后,同时基础的库文件也是和编译器在一起的,有时候编译一个新的内核,还有可能需要修改库文件。
编译执行前还需要找到“.config”文件,默认是放在源码目录下的。使用命令“ls -a”就可以看到,如下图所示。
从本章‘实验 03’的 3.5 小节,学习到这个“.config”是通过 menuconfig 工具生成的,里面只是一些宏定义,如下图所示,打开这个文件。
查找宏定义”LEDS,”是编译 led 驱动的宏定义“LEDS_CTL”,如下图所示。
现在系统找到这个宏定义“LEDS_CTL”,在编译具体中间文件的时候会用到。
具体是怎么实现的,继续看下一小节的内容就可以搞清楚这个宏定义有什么用处。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
电风扇长定时自然风电路
Active-HDL 4.2最新版(Cracked)
PIC单片机编程器的制作资料[图纸、印板和程序].rar
Re: HDLentry 3.2 and active_HDL 3.5,which is better
力科示波器及其在嵌入式系统中的应用(华中科技大学)
电风扇间歇运转电路
SK 海力士据报道将 DDR4/ LPDDR4X 合同价格上调 20%,因 Q3 需求保持强劲
基于TI GaN FET的10kW单相串式逆变器的设计注意事项
米尔将出席瑞芯微第九届开发者大会
“低空经济” 崛起,2025无人机市场暗藏哪些潜力趋势?
三星已获得苹果 2026 折叠手机的独家 OLED 面板订单
微型吊扇定时电路
RS上海新扩建分拨中心 巩固在华领先地位
Pickering Interfaces 发布最新版《PXIMate》PXI 实用指南,助力工程师高效构建 PXI 测试系统
SL811HS开发板原理图.rar
超越--赛灵思7系列28nm FPGA产品发布会
LG Innotek 推出铜柱基板技术,助力智能手机更轻薄
quartusII 7.2 sp1全整合licen se
quartusII 7.2 sp1全整合licen se
全球第一款28nm产品— Kintex-7 FPGA的 10Gbps 眼图演示
Re: 请问哪里有xhdl(可以将verilog转换成vhdl)?
智能精密压力校验仪电原理图.rar
HDL Turbo Writer
英特尔以250万美元价格出售RealSenseAI域名
低功率 RF 混频器增强了接收器性能
定时调速电路
Bourns推出具高耐热性全新厚膜电阻系列,采用紧凑型TO-227封装
有谁知道VHDL描述如何转成Verilog描述?
电风扇多功能定时控制电路
安谋科技CEO陈锋:立足全球标准与本土创新,赋能AI计算“芯”时代