HMI 7寸 带壳 linux 系统的移植

问题: 目前的源码中 只有 android 的config 文件,需要再移植一个 Linux 的config 文件。

过程:

1  首先是可以正常启动。

首先将 4418 的config 文件拷贝到  HMI的源码中,编译一遍看看能不能正常编译正常启动。

cp xxxx  .config

然后编译。

 系统是可以正常启动的。

但是触摸不正常。是有触摸的,但是感觉分辨率不对。

并且virtual size 是不对的。

2 首先解决触摸的问题。

触摸 分辨率不对。

改动:

此时,触摸点 正常了,但是还有一个问题,就是, 手指按下的时候,鼠标箭头 会飞出去,手指抬起来的收,鼠标箭头才会回来。

改动:

目前来说触摸没有问题了。

将这些改动 放到 源码里去。

2 然后是蓝牙+wifi 的移植。

首先是蓝牙的移植

蓝牙的移植,需要配合 文件系统的 bluez 才可以测试。

HMI 或者 4418  只有android 有蓝牙, linux 没有蓝牙功能的测试。

那好,那就先来移植WiFi。

wifi 我用的是这个版本。

这里只有android 的手册。

我可以参考我自己之前整理的 wifi 的Linux 移植。

在移植的过程中顺便把 mt6620 的 驱动去掉。

说明: 我实在别人已经移植好 android4.4 的基础上进行 linux 的移植的,所以有很多 配置我是不需要动的,我可能最多就是 修改一下 menuconfig 的配置。

menuconfig 中 使能 8723bu, 去掉mt6620

对于USB的设置。

对于 IEEE的配置。

此时 ,内核这部分就设置好了,接下俩就是 文件系统部分了。

文件系统需要  iwlist + wpa_supplicant  工具。

接下来就是编译 + 烧写了, 文件系统我是不用动的,他们之前已经 在 测试mt6620 的时候,应该就是 移植好了。

然后,运行wpa_supplicant .

首先查看有没有设备节点。

ifconfig wlan0 up

iwlist wlan0 scan

然后设置 /etc/wpa_supplicant

ctrl_interface=/var/run/wpa_supplicant

network={

ssid="XW"

psk="aaaaaaaa"

}

创建 /var/run/wpa_supplicant

然后运行命令。

wpa_supplicant -Dnl80211 -iwlan0 -c /etc/wpa_supplicant.conf &

然后是分配 ip 地址。

使用 ping 命令测试。

3 然后是 文件系统的小毛病。

  没有 光标

  没有 ctrl c

 触摸节点不对+触摸不灵敏

这些问题已经解决了。

4 开始适配 7寸带外壳的 HMI的 dido 的适配。

5 接下来是 对于can 的适配。

我发现 ,在我自己移植的 带壳的 linux 的源码中没有 can 的节点。

移植can 需要两个步骤,

1  内核使能 can.

前置知识, HMI 的 can 与 RC522 使用的是 spi1 (相同的)

只需要在 menuconfig 中进行设置。

编译+烧写,测试结果。

之所以 上面的menuconfig  可以起到作用,是因为  在device.c 中已经有了配置。

至于具体的驱动我就不去 再看了。

2 在文件系统中,添加关于can 测试的 相关的库。

关于文件系统所需要的 库,以及 测试工具,全在6818 的网盘资料里。

将 libsocketcan.a  ,libsocketcan.la,libsocketcan.so.2.2.1  拷贝到  /lib / 目录下。

将canconfig,candump,canecho,cansend,cansequence,全部拷贝到 /bin/ 目录下,注意修改这几个命令的权限。

将 can_test ,拷贝到  / 目录下,

开始测试。可以看到是正常的。

3 整理 HMI 的 SDK

首先将 can的资料包拷贝进 SDK。

然后将,can的 库文件+测试工具+测试程序,拷贝到 qt_system+qt_system_5.7

做文件系统的固化。

对于 qt_system 的 can 测试的移植也是 从压缩包解压并拷贝 

库文件(做ln 链接)+测试工具(注意chmod 777 )+测试例程。

编译+烧写 ,测试新的文件系统。

然后对 qt 5.7 也做相同的 固化,

这次就直接将 qt_system 中的内容拷贝到  qt_system_5.7 中。

拷贝完毕。

qt_system_4.7 我就先不拷贝了。

接下来再git 中做说明。

拷贝一份配置好的  config 文件。

然后移植 HMI 带壳的 GPIO 的输入+输出。

我发现,再我的 HMI 7寸带壳的源码中已经有了 gpio 的内容。

这些个 驱动 是 针对  HMI 无壳的 源码做的,我需要针对带外壳的 做适当的修改。

硬件:

驱动的改动:

我发现 再我的 HMI 7寸 无壳的 源码中已经有了,对于GPIO的驱动。

1 已经改了 gpio.h

2 已经有了 驱动文件。

3 也已经有了 测试文件。

我是这么再 Makefile 中添加的驱动。

但是为什么 板卡的系统启动之后,没有发现这个设备节点呢?

我又 重新 make clean 然后 ,重新编译了一下,然后可以了。

编译+烧写, 测试之后。

这个节点也有了。

接下来 我使用应用程序实际测试一下,看看可不可以操控。

干脆我将测试程序直接做进 文件系统内。

直接编译文件系统+测试。

我发现确实是可以控制 ,gpio 的高低电平的。

疑问: 我发现,在驱动中只使用了 set_value , 并没有使用 gpio_direction, 难道是不需要吗?

这里只是 , GPIO, 并没有 设置 输入输出呀?

上面的只是输出。

接下来看看输入。

在 gpio.h 中要么就直接 设置成 IN 模式, 要么就设置成 GPIO模式,在驱动中再 设置 gpio_direction, get_value.

我就直接 .h 中设置成输入吧。

这样就改好了,gpio.h 文件。

接下来是去改  驱动文件。

接下来是去改 应用文件。

应用文件这里 ,我把读+写 分开写了。

这是一次性读取 5个DI。

改完之后 去修改 文件系统+ qt5.7 的文件系统。

然后将,应用的源码以及编译的二进制 文件,直接cp 到 文件系统+ qt5.7 的文件系统

编译二进制的命令为:

编译+烧写测试。

经过我的测试, 输出+输入都是可以运行的。

设备树的改动:

如果是这样的话,其实我是不用去改设备树的(其实是 device.c).

不对的,我使用的是 非设备树的 platform 总线,还是需要 device 设备的。

在这里。

那么我看看 led 是怎么搞得。

然后直接就是注册了。

应用程序的改动:

应用程序是 在写 设备节点。

DO1

DO2

DO3

DO4

DO5

DO6

按照这个顺序。

总结一下:

1 完成 linux menuconfig 的移植。这只是一个框架。

2 完成 can 的移植+ 所需的文件放到SDK+ 所需的可执行文件及库 放到了文件系统。

3 完成gpio 的读写的移植,所需的文件放到了SDK+文件系统+ qt_5.7

4 再 SDK 中,添加了 两个目录,用于存放  can+gpio 用到的资源。

现在开始  使用 qt_5.7 的文件系统。并且指定大小。

直接 cp qt_system_5.7/system  qt_system/system -rp

然后,修改build_android.sh

然后,还需要 修改一下 uboot,的烧写的 内容

setenv fastboot "flash=mmc,2:uboot:2nd:0x200,0x78000;flash=mmc,2:2ndboot:2nd:0x200,0x4000;flash=mmc,2:bootloader:boot:0x8000,0x70000;flash=mmc,2:boot:ext4:0x00100000,0x04000000;flash=mmc,2:system:ext4:0x04100000,0x340000000;"

至于怎样再 uboot 中去修改这部分的源码, 我就不去尝试了。

再烧写 system.img 的时候出现这个问题。

问题的解决:

1 我扩展了 system.img 之后,设置了, fastboot 的环境变量,但是烧写的还是 200M的之前的system.img

2 我编译完扩展之后的,system.img , mabaxterm 并没有及时跟新,我下载下来的还是之前的。

也就是说,我的system.img 烧写错了。

系统启动之后遇到的问题。

但是我再重启一次之后,这个问题就可以解决了。

但是我还可以再源码中 注释掉cmd1 来解决这个问题。

  但是我看了一下源码, 我已经注释掉了mmc1 。

先不管这个问题。

目前还有一个光标的问题。

光标的问题,我知道是什么问题了。

当然也可以再 命令行进行设置。

echo -e "\033[?25h"

ctrl+c 的问题也解决了。

光标问题+ ctrl+c 问题,我也再文件系统+ qt_system_5.7 做了固化。

还有一个U盘自动挂载的问题

我发现 ,qt4.7 U盘是不能自动挂载的。

qt5.7 是可以自动挂载的。

那么我就 自己去修改 qt4.7 ,让它可以自动挂载。

首先是 一些前置知识。

什么是 devfs , udev,mdev 呢?

这里我不是很理解, 内核都有了udev, 文件系统还使用什么 mdev ,直接用udev 不就可以了。

然后是 mdev 的使用方法。

我来看看我烧写的文件系统。

然后是内核。

起码 要使能  sysfs, procfs, tempfs,  文件系统。

然后是文件系统的修改。

然后是 mdev.conf 的 知识。

主要是 命令的格式。

来看看 我的 qt4.7 是怎么写的。

所以我需要 自己修改一下 qt4.7 的mdev.conf。

#!/bin/sh
echo "usbdisk insert!" > /dev/console

if [ -e "/dev/$MDEV"  ]  ; then

    mkdir -p /mnt/usbdisk/$MDEV

    mount /dev/$MDEV /mnt/usbdisk/$MDEV
    echo "/dev/$MDEV mounted in /mnt/usbdisk/$MDEV">/dev/console

fi

#!/bin/sh
echo "usbdisk remove!" > /dev/console

umount -l /mnt/usbdisk/sd*
rm -rf /mnt/usbdisk/sd*

然后将文件系统更换掉 ,重新编译+烧写,测试一下。

这里需要注意 ,两个脚本的权限一定是 777.

再 qt_system_4.7 中,固化一下权限。

并且 将文件系统改回  5.7

测试完毕。

问题: U盘再拔出的时候并没有 执行我的脚本。

接下来是 客户的问题,需要在HMI上更换一个 logo

在4418 的手册中,只有 更换 android 系统的 logo 的方法。没有单独写 linux的logo如何更换。

首先将 客户的图片转换成  1024x600 的格式。使用gimp

结果。

将自己生成的 图片替换 logo.bmp ,  然后将自己 编译好的 uimge 替换 uImage.

我最后 还要将这个 最后的 替换logo的压缩包放到 HMI 7寸带壳的 SDK 里面去。

疑问: 在build.sh 里面是如何操作 logo图片的?

----------------------------------------------------------------------------------------------------------------------------

关于 HMI can的测试。

imxull ----> hMI

先来设置 imx6ull .

root@itop-imx6ull:~# ip link set can0 up type can bitrate 50000 triple-sampling on


[  394.781310] flexcan 2090000.can can0: writing ctrl=0x27292085
[  394.787919] IPv6: ADDRCONF(NETDEV_CHANGE): can0: link becomes ready

然后开始发送数据

root@itop-imx6ull:~# while true; do cansend can0 01F#11.22.33.44.55.66.77.88; sleep 1; done

这里有一个报错。

看来是必须要 去接收才行。

HMI 的设置。

iTOP-4418@root:~# ./can_test -r can0


[   35.900000] mcp251x spi2.0: CNF: 0x04 0xf5 0x01
can port is can0
can0 ID=0x1f data length=8
0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88
can0 ID=0x1f data length=8
0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88

可以看到, 刚刚运行程序, 就受到了 数据,这是之前 6ull 一直没发出来的数据。应该是一个buffer 。

开始长时间测试,看看会不会卡死。

4 然后是 对于 hmi  7 寸无壳底板的适配。

相关推荐

  1. hi3516dv500、hi3519dv500移植yolov7,yolov8 (4)

    2024-07-16 22:22:04       37 阅读
  2. 用Kali LinuxMSF远控windows系统

    2024-07-16 22:22:04       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 22:22:04       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 22:22:04       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 22:22:04       62 阅读
  4. Python语言-面向对象

    2024-07-16 22:22:04       72 阅读

热门阅读

  1. [笔试题] C语言部分练习2

    2024-07-16 22:22:04       18 阅读
  2. Mysql关闭严格模式

    2024-07-16 22:22:04       18 阅读
  3. OTP的变化时间

    2024-07-16 22:22:04       21 阅读
  4. xxs攻击的攻击和防范

    2024-07-16 22:22:04       23 阅读
  5. Kotlin 内联

    2024-07-16 22:22:04       23 阅读
  6. 搭建远程控制(远程桌面)服务器

    2024-07-16 22:22:04       23 阅读