我想要在Linux下驱动摄像头ov5640,使用的SoC是NXP的IMX6ULL,内核版本4.1.15。我想要一个比较纯净的嵌入Linux环境,所以打算自己裁剪和移植uboot+linux内核+rootfs。

在配置内核以后的编译过程中出现了问题,我配置内核的步骤如下:

一、使用NXP提供的Linux内核,make clean清理了一下工程,然后使用其默认的配置文件imx_v7_mfg_defconfig来生成.config文件。

二、make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig对内核进行个性化配置,我使用的是csi接口的ov5640,所以主要配置的选项是Device Driver选项中的v4l设备驱动的相关内容。

三、配置完成后,make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j6进行内核的编译,编译过程报错如下:

我配置内核V4L驱动的情况如图:

如果按照默认的配置文件,不去配置V4L的相关驱动,就能顺利编译通过;只要配置了V4L就报上图错误。

网上嵌入式Linux内核编译配置编译报错的帖子不多,由于硬件平台,内核版本的不同,和自己遇到的错误相关的帖子就更少了。经过长时间的踩坑摸索,报这种错的原因主要有两个:

1.报错的函数或者变量本身没有使用EXPORT_SYMBOL进行符号导出,所以在链接过程中就会找不到相应的函数和变量而报未定义的引用这种错误。

2.配置内核过程中自己配置的有些选项有它自己的依赖选项,这些依赖选项没有选上,导致报错。

所以首先去查找这些报错函数是否进行了符号导出。进入内核源码的顶层目录,使用grep命令进行查找,以这一条报错信息为例:

使用命令: grep -rnR “mipi_csi2_get_info” * ,得到如下信息:

可以看到该函数已经用进行了导出,其他函数也一样,所以排除这个原因。

那么现在排查第二个原因,排查这个原因有技巧,还是以“mipi_csi2_get_info”这个函数为例,按照如下的步骤排查:

第一,使用命令:grep -rnR “mipi_csi2_get_info” *,查找到该函数的定义源文件在drivers/mxc/mipi目录下。

第二,进入目录,使用命令 vim Makefile,查看哪个变量控制该源文件的编译,如图:

可以看到是否编译该文件由变量CONFIG_MXC_MIPI_CSI2控制其编译与否。

第三,在该目录下使用命令 vim Kconfig查看在Linux内核的编译选项中对应的选项:

可以看到,在内核的menuconfig中,该编译选项在目录MXC MIPI Support下,默认是n,不编译。至此,我们找到了问题所在,就是因为之前我们自己配置的编译选项依赖这个选项,而这个选项没默认是不编译的,因此我们在配置内核时把这个选项设置成y即可解决报错问题。如图:

至此问题得到了解决,内核可以成功编译。

嵌入式Linux配置内核后编译过程中报未定义引用错误的解决相关推荐

  1. 在编译内核的最后阶段出现sdhci_esdhc_imx_pdata未定义的错误

    遇到下面这种错误 在网上查找资料后,发现一篇好文,提出了良好的找错误的策略: (1)利用grep命令查看该变量在何处使用: (2)查看相应的头文件是否在Kconfig中被定义且在make menuco ...

  2. MySQL 5.1 安装过程中报apply security setting错误的解决办法 收藏

    1, 卸载MySQL 2, 删除目录 C:\Documents and Settings\All Users\ApplicationData\MySQL 3, 重新安装MySQL 就 OK 啦 转载于 ...

  3. linux内核的配置过程,linux内核的配置机制及其编译过程

    linux内核的配置机制及其编译过程. 一.配置系统的基本结构 Linux内核的配置系统由三个部分组成,分别是: 1.Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linu ...

  4. Linux ffmpeg的安装编译过程

    Linux ffmpeg的安装编译过程 1.下载ffmpeg.     在网上搜索一下,或者到官方网站下载 2.解压    tar命令解压 3.配置 ./configure --enable-shar ...

  5. linux下gcc的编译过程详解

    Linux系统下的Gcc(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作品之一.gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一 ...

  6. 嵌入式linux之buildroot(二)编译rk3399镜像

    编译rk3399镜像 1. 前言 2. 编译 3. 输出 4. 测试 5. 目录 1. 前言 开发环境:ubuntu20(docker) 开发板:roc-rk3399-pc-plus 软件:vscod ...

  7. 嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误

    嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误 2015-05-27 14:19 184人阅读 评论(0) 收藏 举报  分类: 嵌入式(928)  一般察看函数运行时堆栈的 ...

  8. 编译Qt“NMAKE:fatal error U1077”错误的解决方法

    编译Qt"NMAKE:fatal error U1077"错误的解决方法 分类: 错误与解决方法 2013-03-18 20:17 1775人阅读 评论(0) 收藏 举报 Qtfa ...

  9. Linux下C语言 对pow、exp未定义引用问题

    问题描述 头文件使用math库时会出现"未定义引用"问题 报错: /tmp/cct7CPFw.o:在函数'main'中: 19012705.c:(.text+0x88):对'pow ...

最新文章

  1. Josephus问题
  2. 使用Wireshark进行DNS协议解析
  3. 克服拖延的11种方法
  4. 4、通过uiautomatorviewer实现appium元素定位
  5. 利用 Bootstrap 进行快速 Web 开发
  6. oenwrt 进不了bios_win7进不了bios原因及解决办法
  7. php paypal订单号查询,php – 在交易后从PayPal获取信息
  8. redis(12)--事件,客户端,服务器
  9. python matplotlib设置字体_Matplotlib中修改字体属性
  10. qt运行C语言后无显示,qt designer启动后不显示界面问题的原因与解决办法-站长资讯中心...
  11. 如何使用Instruments诊断App(Swift版):起步
  12. SQL嵌套语句执行顺序
  13. JavaScript-字符串
  14. 今天给组员找bug有感。
  15. uoj#267. 【清华集训2016】魔法小程序(乱搞)
  16. surfer 8 scripter 学习笔记(9)surfer与VB结合的VB源代码
  17. ZOJ3987(二进制枚举+java大数)
  18. 尚学堂1811期python视频_尚学堂1811期人工智能全套视频教程震撼发布,转型百万年薪工程师!...
  19. 大数据与人工智能专业都这么火,我们应该怎么选?
  20. MySQL:HINT

热门文章

  1. 变压器的这些特性,你了解多少?
  2. c++常见面试问题总结
  3. Matlab------如何控制matlab中的数据输出格式
  4. 数据分析-主成分分析流程(R语言)
  5. 参数估计(二)----极大后验概率估计
  6. Python编程的一些实例(1)
  7. 巴特沃斯数字低通滤波器的设计
  8. grep命令详解(如何匹配多个字符串)(grep指令)(grep -q)
  9. 看这你已经赢麻了,勿以赢小而不麻,2022软件测试八股文最全音
  10. 火山引擎数智平台的这款产品,正在帮助 APP 提升用户活跃度