查看: 225|回复: 0

【米尔MYD-C8MMX开发板】更新内核&板载WIFI驱动&编译第三方...

[复制链接]

主题

好友

1031

积分

进士

  • TA的每日心情
    开心
    2018-11-1 15:07
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2020-6-30 09:43:23 |显示全部楼层
    本帖最后由 donatello1996 于 2020-6-30 01:21 编辑

    【米尔MYD-C8MMX开发板】更新内核&板载WIFI驱动&编译第三方驱动&sysfs点个灯


       如果不是必要的话,我绝对不想动板子的内核文件,编译内核一定是带有目的性的,要么是为了实现某个功能,修复某个外设的BUG,或者新增某个外设的支持,只是单纯为了走试用过场或者只是为了玩耍而编译内核是毫无意义的,这次我编译内核,便是为了更新板子出厂镜像的原有内核,这个内核的版本号名字叫4.14.98-myd-imx8mm-dev+gf062c0f2b,而源码里面的版本号名字叫4.14.98,无法安装内核源码编译出来的ko驱动,使用insmod安装驱动的时候会提示报错:
    46.jpg

    经过与米尔技术支持大佬的沟通,这种报错出现的原因是出厂镜像的内核版本太老,与源码ko所对应的内核版本不匹配导致的,那么,解决方法是编译并升级板子的内核,与源码所对应的内核版本号一致即可。编译内核的操作非常简单,就是简单的四条指令:

    1. make distclean
    2. make defconfig
    3. LDFLAGS="" CC="$CC"
    4. make Image dtbs -j4
    复制代码

    -distclean是清理生成的.o等中间文件
    -defconfig是选择内核模块配置
    -LDFLAGS是运行时加载库
    -CC是编译链,这里选的是$CC,也就是当时已经搭建好的交叉编译链,可以用
    1. echo $CC
    2. $CC
    复制代码
    两条指令查看交叉编译链:
    47.jpg

    make Image 这条指令所生成的uImage文件包含什么内容的内核模块支持,取决于config选项,而make defconfig则是使用默认的选项,而实际上,在内核编译中是完全可以用图形化配置的方式去配置所需内核模块的,就像超市买东西,想买哪个就放进购物车里,不需要编译的模块就完全不需要放进去,使用

    1. apt-get install libncurses5-dev
    2. make menuconfig
    复制代码
    48.jpg


    选项进行图形化配置,menuconfig图形化菜单是需要ncurses软件支持的,不装是没法用的,会报错
    1. * Unable to find the ncurses libraries or the
    2. * required header files.
    3. * ‘make menuconfig’ requires the ncurses libraries.
    4. * Install ncurses (ncurses-devel) and try again.
    复制代码

    要使板子支持板载的AP6212 WIFI模块,首先内核配置选项要改成如下:
    → Networking support → Wireless 下打开cfg80211选项支持:
    49.jpg

    → Device Drivers → Network device support → Wireless LAN下打开BCM 43XX SDIO 设备驱动支持:
    50.jpg

    选择下方的<Save>选项保存,重新清理编译,<Load>刚刚的保存方案,make Image保存即可。

    编译完成后,会在arch/arm64/boot文件夹下生成Image文件:
    51.jpg





    然后到板子上,查找到启动系统镜像的uImage内核存放分区,用
    1. ls /dev
    复制代码
    查看,名字叫mmcblk1p1:
    52.jpg

    将mmcblk1p1分区挂载到/media目录下并进入/media目录:
    1. mount /dev/mmcblk1p1 /media
    2. cd /media
    复制代码
    53.jpg

    将里面的Image文件用刚刚生成的文件替换即可,替换完毕之后,重启,可以看到内核版本号已经改了:
    1. uname -r
    复制代码
    54.jpg


    那么,这时候就可以安装源码目录下生成的各个ko驱动了,美滋滋。

    不过,这时候还不一定能用板载WIFI,还需要将WIFI的固件放到/lib/firmware目录下,一般这个固件名字叫bcmd或者brcm,保险起见两个都放,这两个文件夹在原来的镜像的相同位置可以找到。

    brcm文件夹里面放的就是著名的brcmfmac43430-sdio固件,基本上每个要用AP6212做WIFI模块的板子肯定都有这个文件夹:
    55.jpg




    bcmd文件夹作用不明,最好还是放吧:
    56.jpg



    然后,使用ifconfig指令就可以看到wlan0无限网卡设备了,使用nmcli软件就可以连接,就可以SSH登录了:
    57.jpg

    板载WIFI驱动搞定了,我突然想玩玩新鲜的玩意,想试试编译安装USB无线网卡的驱动,刚好我手头有个RTL8192EU主控的无线网卡,可以试试这样做,不管最后能不能成功,都是一次不错的经历。官方的源码中只有RTL8192EE和RTL8192CU的驱动,就是没有RTL8192EU的,只能从网上查找驱动源码,好在我真的找到了:
    RTL8192EU-src.tar (12.9 MB, 下载次数: 0)
    编译这个源码的过程也遇到了亿点点小曲折,使用交叉编译的方式无法编译,各种报错:
    58.jpg

    那么就只能在板子上进行编译了,那么就需要一个U盘,格式化为ext4格式,存放板子的内核源码和RTL8192EU源码,并mount到板子下面可供操作:

    1. mount /dev/sda4 /mnt
    复制代码
    59.jpg



    修改RTL8192EU的makefile文件:
    60.jpg

    RTL8192EU的默认编译宏是CONFIG_PLATFORM_I386_PC,那我也直接拿来用,不再新建一个了,填好U盘里面的内核源码位置/mnt/imx8ksrc以及网卡drivers位置/mnt/imx8ksrc/drivers/net/wireless/,makefile的编译架构选项(ARCH)填arm64。

    然后直接在RTL8192EU的目录下make即可,另外板子是四核,可以用四线程编译:

    1. cd /mnt/RTL8192EU
    2. make clean
    3. make -j4
    复制代码
    61.jpg



    成功生成了ko,这个ko是可以直接使用的:
    1. insmod 8192eu.ko
    复制代码
    62.jpg



    不过最后功败垂成,加载RTL8192EU驱动,将USB网卡插上板子之后,提示这堆报错,并且一旦输入ifconfig,终端就会卡死无响应,板子编译安装RTL8192EU驱动的计划宣告失败了,不过现在可以用板载WIFI,也没啥影响,哈哈。
    63.jpg
    IMG_20200630_010219.jpg

    最后给板子点个灯,板子的绿色LED已经被设备树锁定了,无法使用/sys/class/gpio目录控制,只能用/sys/class/leds/cpu来控制,控制方法很简单

    1. cd /sys/class/leds/cpu
    2. echo none > trigger
    3. echo 1 > brightness
    4. echo 0 > brightness
    复制代码
    给trigger写none是关掉心跳灯信号,给brightness写1或者0就是开关。


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /5 下一条



    手机版|电路城

    GMT+8, 2020-7-12 10:57 , Processed in 0.062652 second(s), 13 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz!

    返回顶部