疫情,等了好久板子终于到了。
我这里使用的是坑网大佬提供的tiny200开发包,用的芒果派R3配置文件
1,配置其的介质,我板子上用的是nor-spi-flash,所以需要在设备树里面屏蔽掉nand-flash相关的节点,否则启动会有错误。
2,配置屏幕,这里我被困扰好久,其实只需要在uboot里面配置好屏幕参数即可,其他的无需修改,我想歪了,去修改panel,改了好久好多参数都灭有效果,钻牛角尖了,最后看到坑网小伙伴评论:F1C100s如何初始化LCD引脚 ?24bit如何修改成18bit。RGB666如何修改成565.。。。。 / 全志 SOC / WhyCan Forum(哇酷开发者社区)
linux如果用drm驱动,那么就和uboot无关。
linux如果用simplefb驱动,那么就是用uboot初始化的
我才恍然大悟,直接去uboot里面修改屏幕参数就行了
这个时候,我又有疑问了,这些le,ri,up,参数是个什么玩意,百度后找到了如下资料:
U-boot中通过ENV设置显示设备(如LCD)参数的方法与格式_韩半仙的博客-CSDN博客
/******************************************************************
* 解析结构体
******************************************************************/
struct ctfb_res_modes {
int xres; /* 可见分辨率 */
int yres;
/* 时序: 所有值都以像素时钟为单位(当然除了像素时钟本身) */
int pixclock; /* 像素时钟(单位:微秒) */
int left_margin; /* 从行同步到图像左边沿的像素时钟数 */
int right_margin; /* 从行同步到图像右边沿的像素时钟数 */
int upper_margin; /* 从场同步到图像上边沿的行数 */
int lower_margin; /* 从场同步到图像下边沿的行数 */
int hsync_len; /* 行同步时间长度(像素时钟数) */
int vsync_len; /* 场同步时间长度(行数) */
int sync; /* see FB_SYNC_* */
int vmode; /* see FB_VMODE_* */
};
参数无效_lcd参数解释及刷新率计算,LCD时序_刘万祥ExcelPro的博客-CSDN博客
到这就知道参数怎么设置,以及参数的含义了。
最后看下测试效果:
3,通过控制台命令切换USB模式,参考下面帖子
主线Linux用shell命令切换 OTG(分享)tiny200/licheepi nano|zero均可以使用 / 全志 SOC / WhyCan Forum(哇酷开发者社区)
&usb_otg {
dr_mode = "otg"; /* 三个可选项: otg / host / peripheral */
status = "okay";
};
##切换到host模式:
# echo host > /sys/devices/platform/soc/1c13000.usb/musb-hdrc.1.auto/mode
# [ 117.758152] phy phy-1c13400.phy.0: Changing dr_mode to 1
[ 118.414817] usb 1-1: new high-speed USB device number 3 using musb-hdrc
[ 118.598193] usb-storage 1-1:1.0: USB Mass Storage device detected
[ 118.611789] scsi host0: usb-storage 1-1:1.0
[ 119.686198] scsi 0:0:0:0: Direct-Access Mass Storage Device 1.00 PQ: 0 ANSI: 0 CCS
[ 119.703976] sd 0:0:0:0: [sda] 3842048 512-byte logical blocks: (1.97 GB/1.83 GiB)
[ 119.725260] sd 0:0:0:0: Attached scsi generic sg0 type 0
[ 119.739844] sd 0:0:0:0: [sda] Write Protect is off
[ 119.771819] sd 0:0:0:0: [sda] No Caching mode page found
[ 119.777288] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 119.801571] sda: sda1 sda2 sda3
[ 119.817224] sd 0:0:0:0: [sda] Attached SCSI removable disk
#
##切换到device模式:
# echo peripheral > /sys/devices/platform/soc/1c13000.usb/musb-hdrc.1.auto/mode
[ 123.880272] phy phy-1c13400.phy.0: Changing dr_mode to 2
# [ 123.890905] usb 1-1: USB disconnect, device number 3
4,移植wifi
这段时间把wifi移植了一下,我买了几个rtl8189es模块,自己作了一个tf卡接口,直接插到板子上的tf卡接口上去, 驱动的话我从github上找了一个可用的,克隆到自己的仓库了,用也能用,就是延迟有点高。
下面这个是我移植esp32做网卡的过程。
# cd /lib/modules/5.4.99/extra/
# modprobe esp32_spi.ko resetpin=0
可能会遇到ifconfig后看不到网卡的情况,这个时候我们去看看
# ls /sys/class/rfkill/rfkill
ls: /sys/class/rfkill/rfkill: No such file or directory
# cat /sys/class/rfkill/rfkill
cat: can't open '/sys/class/rfkill/rfkill': No such file or directory
# cat /sys/class/rfkill/rfkill
rfkill0/ rfkill1/
如果有类似
# cat /sys/class/rfkill/rfkill0/uevent
RFKILL_NAME=phy0
RFKILL_TYPE=wlan
RFKILL_STATE=0
# cat /sys/class/rfkill/rfkill1/uevent
RFKILL_NAME=hci0
RFKILL_TYPE=bluetooth
RFKILL_STATE=0
说明是已经成功加载驱动了。
如果ifconfig看不到网卡可能是没打开,使用ifconfig espsta0 up 打开网卡,这里我遇到一个问题
# ifconfig espsta0 up
ifconfig: SIOCSIFFLAGS: Operation not possible due to RF-kill
这是因为系统没有增加rfkill这个软件包,有两种方法解决:
第一、
去buildroot里面的busybox增加软件包执行
第二、
0就是关闭,1就是打开
# echo 1 > /sys/class/rfkill/rfkill1/state
# echo 1 > /sys/class/rfkill/rfkill0/state
# echo 0 > /sys/class/rfkill/rfkill0/state
# echo 1 > /sys/class/rfkill/rfkill0/state
然后我么就可以使能网卡了
# rfkill list
0: phy0: wlan
Soft blocked: yes
Hard blocked: no
1: hci0: bluetooth
Soft blocked: yes
Hard blocked: no
# rfkill unblock all
# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
# ifconfig espsta0 up
# ifconfig
espsta0 Link encap:Ethernet HWaddr 30:AE:A4:15:03:58
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:1 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
#
我么们尝试扫描wifi
# iw espsta0 scan | grep SSID
SSID: ChinaNGB-Yd6FTJ
SSID: ChinaNet-S9XX
SSID: ChinaNet-jZvT
SSID: ChinaNet-P1l6
SSID: Carrie Yang
* UTF-8 SSID
SSID: CMCC-UPqj
SSID: \xe8\x90\x9d\xe5\x8d\x9c\xe7\x99\xbd\xe8\x8f\x9c
SSID: TP-LINK_32F9
SSID: ChinaNet-imsv
SSID: CMCC-YCA7
SSID: wifi-yyds
SSID: ChinaNet-bKvs
SSID: CMCC-Qf4X
SSID: CMCC-5sp7
SSID: CMCC-YSsA
SSID: CMCC-ANd5
SSID: \xe8\x83\x96\xe8\x83\x96\xe6\x97\xa0\xe6\x95\x8c\xe8\x83\x96
SSID: CMCC-deii
HESSID: 94:be:09:91:be:99
SSID: CMCC-F9D3
SSID: HUAWEI-HXY302
* UTF-8 SSID
SSID: TP-LINK_5D72
SSID: CMCC-PAd9
#
链接wifi
# cat /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="wifi-yyds"
psk="123456789"
}
# wpa_supplicant -D nl80211 -i espsta0 -c /etc/wpa_supplicant.conf -B
Successfully initialized wpa_supplicant
# [ 165.502014] esp32_spi: esp_inetaddr_event: Interface Down: 0
[ 167.196513] esp32_spi: cmd_auth_request: Authentication request: 44:41:f0:18:d8:c9 4 0 0 0
[ 167.439461] esp32_spi: cmd_assoc_request: Association request: 44:41:f0:18:d8:c9 4 27
[ 167.480070] esp32_spi: process_assoc_event: Connection status: 0
[ 167.567024] esp32_spi: process_rx_packet: Rx PACKET_TYPE_EAPOL!!!!
[ 167.573433] NOHZ: local_softirq_pending 08
[ 167.592913] esp32_spi: process_rx_packet: Rx PACKET_TYPE_EAPOL!!!!
[ 167.599199] NOHZ: local_softirq_pending 08
[ 173.361339] esp32_spi: esp_inetaddr_event: NETDEV_UP interface espsta0 ip changed to 192.168.001.022
查看网卡
# ifconfig
espsta0 Link encap:Ethernet HWaddr 8C:AA:B5:8E:C3:A4
inet addr:192.168.1.22 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:10 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:623 (623.0 B) TX bytes:964 (964.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
#
5,适配触摸屏
我这是拆的屏幕,自带触摸芯片是GT911,sdk里面的分辨率是800x480的,弄上去触摸到的位置有偏差,想到应该是触摸芯片的配置文件不对,查看源码,发现是驱动在创建的时候写入了一个配置文件,名字是goodix_911_cfg.bin,发现就是一个配置数组,数组内容下面这个链接有介绍,至此我们就直接简单粗暴修改下尺寸,但是发现不行,报错。
http://www.doczj.com/doc/bb14276644.html
#include <stdio.h>
unsigned char GT911_CFG_TBL[] =
{
0x42, 0xE0, 0x01, 0x10, 0x01, 0x0A, 0x3D, 0x00, 0x01, 0x08, 0x28, 0x08, 0x5A, 0x46, 0x03, 0x05,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1A, 0x1E, 0x14, 0x89, 0x2A, 0x09, 0x57, 0x5C,
0xB5, 0x06, 0x00, 0x00, 0x00, 0x02, 0x01, 0x1D, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x46, 0x82, 0x94, 0xC5, 0x02, 0x07, 0x00, 0x00, 0x04, 0x96, 0x4A, 0x00, 0x85,
0x54, 0x00, 0x77, 0x5F, 0x00, 0x6A, 0x6C, 0x00, 0x5F, 0x7A, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x10, 0x12, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x04, 0x06, 0x08, 0x0A, 0x0F, 0x10, 0x12, 0x16, 0x18, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22,
0x24, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x01
};
unsigned char calcChecksum(unsigned char *buf, unsigned char len) {
unsigned char ccsum = 0;
for (unsigned char i = 0; i < len; i++) {
ccsum += buf[i];
}
return (~ccsum) + 1;
}
int main() {
unsigned char sub = 0;
sub = calcChecksum(GT911_CFG_TBL,sizeof(GT911_CFG_TBL)-2);
printf("sub:%x\n",sub);
return 0;
}
后面又移植了fr6336U,成功驱动了,顺便测试了一下,也没啥毛病,这里记一下特别好用的命令:
hexdump /dev/input/event0
音频这一块也顺便测试了一下,也是ok的,这里记录一下测试命令:
# tinymix set 1 10
# tinymix set 2 1
# tinymix set 13 1
# tinymix contents
Number of controls: 25
ctl type num name value
0 INT 1 DAC Playback Volume 63 (range 0->63)
1 INT 1 Headphone Playback Volume 10 (range 0->63)
2 BOOL 2 Headphone Playback Switch On, On
3 INT 1 Line In Playback Volume 0 (range 0->7)
4 INT 1 FM In Playback Volume 0 (range 0->7)
5 INT 1 Mic In Playback Volume 3 (range 0->7)
6 INT 1 Mic Boost Volume 4 (range 0->7)
7 INT 1 ADC Capture Volume 3 (range 0->7)
8 BOOL 1 ADC Mixer Right Out Capture Switch Off
9 BOOL 1 ADC Mixer Left Out Capture Switch Off
10 BOOL 1 ADC Mixer Line In Capture Switch Off
11 BOOL 1 ADC Mixer Right FM In Capture Switch Off
12 BOOL 1 ADC Mixer Left FM In Capture Switch Off
13 BOOL 1 ADC Mixer Mic Capture Switch Off
14 BOOL 1 Left Mixer Right DAC Playback Switch Off
15 BOOL 1 Left Mixer Left DAC Playback Switch Off
16 BOOL 1 Left Mixer FM In Playback Switch Off
17 BOOL 1 Left Mixer Line In Playback Switch Off
18 BOOL 1 Left Mixer Mic In Playback Switch Off
19 BOOL 1 Right Mixer Left DAC Playback Switch Off
20 BOOL 1 Right Mixer Right DAC Playback Switch Off
21 BOOL 1 Right Mixer FM In Playback Switch Off
22 BOOL 1 Right Mixer Line In Playback Switch Off
23 BOOL 1 Right Mixer Mic In Playback Switch Off
24 ENUM 2 Headphone Source Playback Route , DACMixer, , DACMixer
# mpv /media/qhc-zjl.mp3
Compiled without libass.
There will be no OSD and no text subtitles.
Playing: /media/qhc-zjl.mp3
(+) Audio --aid=1 (mp3 2ch 44100Hz)
AO: [oss] 44100Hz stereo 2ch s16
A: 00:01:25 / 00:03:57 (36%)
tinycap xixi.wav -t 2
tinyplay xixi.wav
playing 'xixi.wav': 2 ch, 48000 hz, 16 bit
正常播放,设置Mic Boost Volume可以调节录音大小。
下一步就是调试摄像头了。
如何查看摄像头支持的格式
Ubuntu 下如何测试 USB 摄像头支持的分辨率、压缩格式,并使用 OpenCV 按正确的格式读取出来?_斜雨踏歌的博客-CSDN博客_usb摄像头输出格式
使用命令行拍照测试
1,查询摄像头支持的格式和分辨率
v4l2-ctl -d /dev/video1 --list-formats-ext
2,设置格式
media-ctl --set-v4l2 '"ov2640 0-0030":0[fmt:YUYV8_2X8/640x480]'
3,开始拍照
fswebcam -d /dev/video0 --no-banner -r 640x480 -S 10 1.jpg