(野火)imx6ull移植openwrt

注意:

	1.不要有中文路径
	2.openwrt须在Linux下进行解压
	3.不要用sudo  运行make 
	4.网络稳定 (含有大量的下载链接 如果不稳定的话容易出错)
	5.openwrt只要编译过一次就可以了,在没有调用make menuconfig去修改内部配置时,就可以一直使用它,内核上的改动,去替换内核即可,这能省下不少时间
	6.野火官方提供的内核是无法打开wifi的 
		原因:是这个openwrt所使用的内核是平时debian系统的内核,那个把这些配置都弄成设备树插件了,然后在系统里面
	直接开启下就行,但是这个openwrt系统没有用到设备树插件,把内容都写到了主设备树,默认没加那个wifi配置所以现在
	有俩种方法1.更换内核。使得内核支持插件
	2.将内核插件中的内容移入到主设备树中
	这里是官方提供的参考资料(无法支持wifi)
	https://doc.embedfire.com/openwrt/nxp/imx6ull/zh/latest/doc/build_image/fire_openwrt/fire_openwrt.html#openwrt

一.编译
内核(ebf_gateway_linux_kernel):

	    export CROSS_COMPILE=arm-linux-gnueabihf-
        export ARCH=arm
        make npi_v7_defconfig
        make
        这里可能会遇到一个问题 "undefined reference to `OPENSSL_add_all_algorithms_noconf  ",这个问题我后面有提到,
        参考下文,但其要求的openssl版本是3.0.8.

openwrt
1.如果使用的是野火官方提供的openwrt版本

在运行./make_fire.sh之前,可以先修改文件feeds.conf.default ,替换对应的下载源
src-git packages https://gitee.com/openwrt-mirror/packages.git^2e6bd4cb86682b224803325127d3f777d40b3231
src-git luci https://gitee.com/openwrt-mirror/luci.git^fb2f36306756d0d0782dcab8413a8bb7ec379e54
原因:原先的下载源是在国外,不仅下载慢,而且有失败的风险,所以还是建议更换的

2.如果使用的是别的openwrt版本则执行下列步骤
修改下载源
./scripts/feeds update -a
./scripts/feeds install -a
你还是需要下载野火官方提供的openwrt,把其中的配置文件(./config/imx6ull_xxx_defconfig,xxx:板子的版本)下载至你的openwrt下的
config文件夹中,同时运行
cat ./config/imx6ull_xxx_defconfig > .config
到这里就等于运行了脚本./make_fire.sh

野火提供的openwrt估计是他们进行过额外的添加使得支持imx6ull,所以不可以使用别的版本openwrt.

接下来的操作,按照参考资料即可
说一下编译过程中我遇到的各种问题

在编译的过程中会遇到各种问题,比如压缩包缺少,文件缺少什么的
先说下安装包缺少的问题,这个问题多半是因为资源在国外,网速不行导致的,少部分是因为链接失效
解决方法
仔细查看调试信息,提供了一个下载网址,自己去下载这个压缩包,然后把这个东西放到dl文件夹中
如果真的是链接失效了,就去百度搜下这个压缩包,反正核心思想就是获得这个压缩包,将其放到dl下

如果是文件缺失啥的,可能就比较麻烦了
使用find ./ -name xxxx 查找openwrt下是否存在该文件,有俩种情况
1.若存在则复制到相应的文件夹下
在这里插入图片描述
如上图所示其 undefined reference to ‘nf_dup_ipv6’ 。
(1)我们进入到对应的Makefile所在文件夹(A),发现确实没有其对应的.c文件,在内核中调用 find ./ -name nf_dup_ipv6* 查找该文件 ,并把该文件 复制到文件夹(A)下面 。
(2)再进入其Makefile文件 如下图 增加其.o文件即可
在这里插入图片描述
2.若不存在对应的.c文件
一共有三种方法可以尝试
(1)将对应的Makefile中 关于调用该文件的内容注释掉了

在这里插入图片描述
如上图所示 系统在文件夹 /home/linux/19_openwrt/openwrt-19.07.2/package/kernel/linux 下 由于 modules/netfilter.mk的161行包含nf_flow_table_hw.ko ,但是在其对应文件夹下又找不到该文件 而导致了问题的产生。
解决方法 打开文件 /home/linux/19_openwrt/openwrt-19.07.2/package/kernel/linux/modules/netfilter.mk 查找nf_flow_table_hw.ko 并将其注释掉。
在这里插入图片描述

(2)
如图片所示 其是在./build_dir/target-arm-cortex-a7+vfpv3-d16_glibc_eabi/linux-imx6/linux-4.19/net/netfilter/下缺少nf_flow_table_hw.ko
那就进入这个文件夹 其下有个Makefile是用来制定生成该ko文件的规则,查找nf_flow_table
在这里插入图片描述
先来解释下这个语法
在这里插入图片描述
obj-y 编译进内核
obj-m 编译成模块
如果既不是y也不是m则不被链接这也是导致为啥其会缺少ko文件的原因。
所以最简单的办法就是直接对该makefie中的
obj-$(CONFIG_NF_FLOW_TABLE) += nf_flow_table.o
改成:obj-m += nf_flow_table.o
继续深入研究这个CONFIG_NF_FLOW_TABLE 这个值是什么时候赋予的呢 ,其实是在我们编译内核时 调用的
make npi_v7_defconfig 时 这个npi_v7_defconfig中被赋值了
(3)
注:nf_flow_table_hw.ko missing这个问题非常奇怪,第一次编译可以通过,但是第二次再去编译它时就会出现这个问题,目前没有什么更好的办法,只能一切从头再来。
后来我去查了下这个问题,说是因为openwrt的版本问题。但是野火提供的openwrt估计是他们进行过额外的添加使得支持imx6ull,不能更换,也就不去深究了。

3.在编译过程我还碰到一个奇怪的问题
"undefined reference to `OPENSSL_add_all_algorithms_noconf "
在这里插入图片描述
这个问题是由于 openssl的版本不匹配出现的 ,匹配的版本是openssl 1.0.2 将其编译安装后
把其生成的 如下图所示文件 放入 /usr/lib下即可编译成功
在这里插入图片描述
当其编译过后这一步就算完成了。

二.打包
接下来会使用到官方提供的软件mfgtools
这里提供一个安装包(也可以在野火提供的百度云文件中搜索下使用) https://download.csdn.net/download/qq_51252118/88046394
1.在内核文件夹中依次运行
在这里插入图片描述

make mrproper

sudo ./make_deb.sh
在跟内核同级目录下存在三个deb包

在这里插入图片描述
解压openwrt文件系统(rootfs)

1.将./lib/fireware 下文件补齐(连wifi必要操作,若不要wifi功能则跳过)
将 驱动(从网上查找适合的驱动这里提供一个网址,https://gitee.com/Embedfire/linux-firmware)添加进该文件 
这里我更加建议直接去淘宝找野火的旗舰店找技术人员获取比较快,这个网址也是他们提供的。

在这里插入图片描述

2.将三个deb包放到rootfs文件夹的同级目录下

在这里插入图片描述

运行指令

dpkg-deb --extract linux-image-4.19.35-imx6_1stable_armhf.deb rootfs/
若运行成功则在其rootfs/boot下存在三个文件 

A

在这里插入图片描述
获取下载器 mfgtool中的boot.tar

在这里插入图片描述
接下来的操作在linux中完成

3.解压

进入解压后的文件夹 将kernel下的三个文件替换成上述生成的三个文件(A)
在这里插入图片描述
之后将文件系统rootfs与boot 分别打包成 rootfs.tar 与boot.tar
在将这俩个文件放入下载器的Profiles/linux/OS Firmware/release 文件夹下
在这里插入图片描述
4.下载
修改cfg.ini如下图所示
在这里插入图片描述
之后下载就可以运行

接下来是启动wifi的操作
首先你得满足俩个要求 :
1.你的openwrt系统已经有设备树功能,或者已经支持无线网卡功能
2.你得有对应的网卡的驱动并将其放在/lib/firware下
在这里插入图片描述

更改后的内核增加了设备树功能
我们第一步就是打开设备树中的AP6232功能
在这里插入图片描述
这里还未挂载分区
我们在 /etc/fstab文件中添加

/dev/mmcblk1p1 /boot auto defaults 0 0

然后运行指令 mount -a 即可
要开机自动挂载功能的话,则将 mount -a写入到 /etc/rc.local

重新进入 /boot
在这里插入图片描述
修改 uEnv.txt
在这里插入图片描述

重启

指令: 运行ifconfig 与ifconfig -a 对比下缺少的即是物理网卡 我的是wlan0
运行指令 ip link set wlan0 up
再次查看 wlan0 出现

这个时候输入 iw dev 查看信息 如果没有这个的话可能就得考虑驱动是否识别的问题了
在这里插入图片描述
主要是这个type 是managed 而我们是作为一个路由所以他按道理应该是个AP才对,所以我们要把其更改为AP
具体步骤
1.首先确保存在hostapd命令
若不存在则安装(不过使用野火提供的配置的话应该是存在的),openwrt使用的是opkg而不是apt-get,至于这个怎么用,自己探索
2.创建文件 hostapd.conf输入以下内容
输入以下内容

driver=nl80211
ssid=PC_WiFi
channel=1
interface=wlan0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_passphrase=12345678
wpa_pairwise=TKIP

解释说明

1.nl80211用于对无线设备进行配置管理,它是一个基本的用户态协议。
2.设置局域网名称(Service Set Identifier, ssid)
3.使用Wi-Fi信道1
4.需要配置为AP的网络接口名称为wlan0(可以通过iw dev来查看电脑上的网络接口名称)
5.选择加密方式为WPA2
6.秘钥的管理算法选择PSK,即WPA-Personal
7.设置长度最少为8位的密码
8.选择秘钥生成方式为TKIP,Temporal Key Integrity Protocol
参考:https://blog.csdn.net/Cui_Hongwei/article/details/109554960

3.运行指令

hostapd /etc/hostapd/hostapd.conf

再次调用iw dev (按道理应该是没有这个ssid的只要看到type是AP就行 ,这是我成功以后回来补的教程)
在这里插入图片描述
接下来就是配置/etc/config/wireless文件了
分别调用

rm -f /etc/config/wireless
wifi config instead
cat /etc/config/wireless (注:这一步确保其文件中有内容)
uci set wireless.@wifi-device[0].disabled="0"
uci commit wireless
wifi

到这里基本配置完成,重启下设备

进入网页
我是出现了一个问题 手机可以看到热点信息,但连进去以后显示无IP可分配,然后这么操作以后就可以了 。
或许 1 2 俩步是可以不执行的只执行3 4
1.点击lan的编辑
在这里插入图片描述
2.将桥接接口的勾选去除在这里插入图片描述
3.点击编辑在这里插入图片描述
4.将网络改成lan在这里插入图片描述
到此我的openwrt就可以用了 接下来是实现openwrt的4g网卡,我另开一篇来写。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值