本帖最后由 鲲翔 于 2018-3-22 23:54 编辑
从去年5月份开始第一次发贴问media_build的编译,到目前为止阶段性的成功。整整花了一年时间,也算是圆满吧。其中过程主要是没有同行者,不止国内没有,google也找不到全是自己一个人在黑暗中摸索,好在兴趣为灯,坚持了下来。好了,废话不说,进入正篇。
这里使用的是4.14的内核,其它内核会有其它错误,需要自己排错,要是内核更新了,也要自己排错。现在暂时ralink的内核还是4.9我们到/openwrt/target/linux/ramips下,将Makefile直接改成4.14。
好了,下面把openwrt-dvb feed下载回来,
将下载回来的源码放到openwrt源码下的package文件夹下。其中v4l-dvb即为DVB的驱动程序,这个驱动来自Crazycat69的开源项目,也是目前为止支持最多DVB卡的驱动。对x86平台兼容性很好,不管什么内核基本都能成功。可惜对于mipsel架构就不是那么友好了,网上基本上没有先例,出问题也不知道找谁。下面我们来编译试试了.
Make V=s
这里第一个问题就是没有arch对应的架构,mipsel实际上和mips使用的是同一个,这里我们只要做个软链接就行了。
Cd openwrt/build_dir/target-mipsel_24kc_musl/linux-ramips_mt7621/linux-4.14.27/arch
ln -s mips mipsel
继续编译,又出错了。报错的是openwrt/build_dir/target-mipsel_24kc_musl/linux-ramips_mt7621/linux-4.14.27/arch/mips/include/asm下的irq.h文件。这里遇到了一个找不到NR_IRQS的错误,这里用find命令找一下,看下哪些文件包含这个函数。
find . -name "*.h" | xargs grep"NR_IRQS"
查到asm目录下的mach-对应的平台下都包含了这个函数。这里我们是在编译mipsel的,就是mtk的,所以在irq.h头文件这里添加一个#include <asm/mach-ralink/irq.h>(其它架构要作相应调整)。添加这个头文件后,这个错误消失了。
继续往下,又跑出一个找不到m2m_ctx。编译这个真是错误百出啊。可是没办法,继续排错。再查找一下。
find . -name "*.h" | xargs grep"m2m_ctx"
发现v4l2-fh.h文件定义了这个函数,但是它却有一个判断,开启相应的选项后才会定义。 #if IS_ENABLED(CONFIG_V4L2_MEM2MEM_DEV) structv4l2_m2m_ctx *m2m_ctx; #endif
可是在openwrt里编译这个v4l驱动,运行的menuconfig不包含v4l的选择,所以默认全为yes,可惜代码不知道啊。解决的方法简单粗暴,删掉这个判断,直接让它定义。直接变成
- struct v4l2_m2m_ctx *m2m_ctx;
复制代码
保存,还有报错的那个文件vim2m.c,加上相应的头文件。
#include <media/v4l2-fh.h>
OK,保存。这次终于顺利完成了。
要是需要其它架构的驱动,需要自己排错了。这是我在4.14上编译mtk下的dvb驱动记录。
|