如题,V851s内存大小有点受限
Posts made by ddrddr
-
NPU模块vpm_run例程运行时sample.txt读取错误
编写sample.txt文件:
[network] ./network_binary.nb [input] ./iter_0_images_262_out0_1_3_640_640.tensor
将模型、输入文件、vpm_run例程传入板端
运行vpm_run例程:
./vpm_run -s sample.txt
报错LOG如下:
unsupported input file type=tenso. error input file type segmentation fault
-
创龙AD+全志T3 TL7606I模块测试
前 言
本文主要介绍基于全志科技T3(ARM Cortex-A7)处理器的8/16通道AD采集开发案例,使用核芯互联CL1606/CL1616AD芯片,亦适用于ADI AD7606/AD7616。CL1606/CL1616与AD7606/AD7616软硬件兼容。
备注:
(1)创龙科技TL7606I模块使用AD芯片为核芯互联CL1606或ADI AD7606,两者均测试通过,且测试步骤无差别。
(2)创龙科技TL7616P模块使用AD芯片为核芯互联CL1616或ADI AD7616,两者均测试通过,且测试步骤无差别。
硬件平台:
创龙科技T3工业评估板
TL7606I多通道AD模块
TL7616P多通道AD模块
TL7616P模块测试
(1)硬件连接
请使用VGA线将评估板VGA OUT接口与VGA显示屏连接。
由于评估底板拓展接口未预留SPI总线引脚,因此需参考如下方法进行飞线,并且应尽可能使用短线连接,硬件连接如下图所示。将评估底板SPI FLASH(U6)空贴后的引脚1(SPI CS)、2(SPI MISO)、5(SPI MOSI)、6(SPI CLK)和4(GND)通过飞线引出。
请通过飞线将TL7616P模块CON1接口与SPI FLASH(U6)飞线引出的引脚、CAMERA0(J11)接口参照下表对应关系进行连接。
其中,CAMERA0(J11)接口的pin23~pin24引脚为TL7616P模块提供控制信号。
备注:"/"表示无需连接。
请通过飞线将评估底板C2电解电容器的正负极引出,并与TL7616P模块CON2接口参照下表对应关系进行连接,为TL7616P模块提供12V直流电源。
案例支持TL7616P模块16通道AD数据同时采集与显示。本次测试以TL7616P模块V1A和V1B通道为例,请将TL7616P模块的V1A和V1B通道分别正确连接至信号发生器A通道和B通道。信号发生器设置A通道输出频率为1KHz、峰峰值为5Vpp(即幅值为2.5V)的正弦波信号,B通道输出频率为1KHz、峰峰值为2Vpp(即幅值为1V)的正弦波信号,如下图所示。待测信号电压请勿超过模块量程,否则可能会导致模块损坏。
(2)案例测试
请将案例bin目录下的可执行文件ad_capture、驱动文件ad76x6.ko和"driver\boot_package"目录下的boot_package_vga_ad7606.fex镜像文件拷贝至评估板文件系统任意目录下。
在评估板文件系统boot_package_vga_ad7606.fex镜像文件所在路径下,执行如下命令将其固化至Linux系统启动卡,并重启系统。
Target# dd if=boot_package_vga_ad7606.fex of=/dev/mmcblk1 seek=32800 Target# dd if=boot_package_vga_ad7606.fex of=/dev/mmcblk1 seek=24576 Target# sync Target# reboot
评估板系统重启后,进入评估板文件系统执行如下命令加载驱动。加载成功后,将会生成设备节点"/dev/ad7606"。
Target# insmod ad76x6.ko Target# ls /dev/ad7606
执行如下命令,查询程序运行参数。Target# ./ad_capture --help
执行如下命令,AD模块将会采集8192个数据,并转换成电压值。Target# ./ad_capture -d /dev/ad7606 -n 1024
请将生成的data.csv文件拷贝至Windows任意目录下,并使用Excel打开,如下图所示。其中,第C列数据为TL7606I模块V3通道的采集数据,第H列数据为TL7606I模块V8通道的采集数据,默认单位为:V。
请通过Excel的二维折线图,将采集数据显示为更加直观的波形图,如下图所示。
-
创龙T3开发板使用体验--基本开发环境搭建
创龙T3开发板:https://bbs.aw-ol.com/topic/2228/
1. 建立连接,测试基本功能。
1.1. 用上位机建立连接
开箱,熟悉资料,总体感觉做工工整(尤其是电源部分,用料很足),资料详实,有其他linux开发板经验的玩家上手很容易。
基本连接和测试主要参考用户手册--2.1评估板测试手册, 网络连接,LED/UART/USB测试等等
首先要做的就是用上位机连接开发板,参考前一篇文章的方法:
Windows网线直连linux开发板或树莓派-超详细_海里的鱼2022的博客-CSDN博客
顺利连接,默认用户为root
如此,便是登录成功
查看下文件和存储空间使用情况:
root@T3/A40i-Tronlong:~# cd ../ root@T3/A40i-Tronlong:/# ls CameraUI home proc tmp G2dDemo init qt5.9.sh usr Launcher lib recordTest var MediaUI lib32 root video_serv adb.sh libexec run wave bin linuxrc sbin xplayerdemo core lost+found sdktest xplayerdemoH264 dbusrun.sh media storage.sh dev mnt sys etc opt system root@T3/A40i-Tronlong:/# df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9G 509.2M 1.3G 27% / devtmpfs 358.8M 0 358.8M 0% /dev tmpfs 375.0M 0 375.0M 0% /dev/shm tmpfs 375.0M 12.0K 375.0M 0% /tmp tmpfs 375.0M 12.0K 375.0M 0% /run /dev/mmcblk0p2 7.0M 4.2M 2.7M 61% /mnt/emmc/mmcblk0p2 /dev/mmcblk0p7 1.9G 509.1M 1.3G 27% /mnt/emmc/mmcblk0p7 /dev/mmcblk1p2 7.0M 4.2M 2.7M 61% /mnt/sdcard/mmcblk1p2 /dev/mmcblk1p7 1.9G 509.2M 1.3G 27% /mnt/sdcard/mmcblk1p7 cgroup 375.0M 0 375.0M 0% /sys/fs/cgroup root@T3/A40i-Tronlong:/#
上位机和开发板之间传输文件:
1)ftp方法
上位机安装filezilla, 然后可以远程连接后直接查看文件目录或进行文件传输
2)scp方法
现在目标板上新建hy目录
root@T3/A40i-Tronlong:/# mkdir hy
在上位机ubuntu虚拟机下
拷贝单个文件:
hy@ubuntu:~/t3dev/samples/python-demos/key_test$ sudo scp *.* root@192.168.137.48:/hy key_test.py 100% 2819 67.6KB/s 00:00
拷贝整个文件夹
hy@ubuntu:~/t3dev/samples$ sudo scp -r python-demos/ root@192.168.137.48:/hy led_flash.py 100% 3005 886.0KB/s 00:00 key_test.py 100% 2819 72.7KB/s 00:00
1.2测试板载资源,LED, KEY等
BOOT-SET选项打到OFF位置(向板外方向)为EMMC启动,ON位置为SD卡启动,试过都是OK的。
测试LED,板载的LED0/LED1见上图红框位置
命令行测试命令:
root@T3/A40i-Tronlong:/# echo 0 > /sys/class/leds/user-led0/brightness root@T3/A40i-Tronlong:/# echo 1 > /sys/class/leds/user-led0/brightness root@T3/A40i-Tronlong:/# echo 0 > /sys/class/leds/user-led1/brightness root@T3/A40i-Tronlong:/# echo 1 > /sys/class/leds/user-led1/brightness
以上分别测试LED0/LED1的亮(1)/灭(0),板载LED正常受控。
测试按键,板载共有KEY3/4/5三个用户定义按键,可以用命令查看对应事件
root@T3/A40i-Tronlong:/# cat /proc/bus/input/devices I: Bus=0019 Vendor=0001 Product=0001 Version=0100 N: Name="sunxi-ths" P: Phys=sunxiths/input0 S: Sysfs=/devices/virtual/input/input0 U: Uniq= H: Handlers=event0 B: PROP=0 B: EV=9 B: ABS=100 0 I: Bus=0019 Vendor=0001 Product=0001 Version=0100 N: Name="sunxi-keyboard" P: Phys=sunxikbd/input0 S: Sysfs=/devices/virtual/input/input1 U: Uniq= H: Handlers=kbd event1 B: PROP=0 B: EV=3 B: KEY=10000 c00 0 300800 40040 0 0 10000000 I: Bus=0019 Vendor=0001 Product=0001 Version=0100 N: Name="sunxi-keypad" P: Phys=Keypad/input2 S: Sysfs=/devices/virtual/input/kp0 U: Uniq= H: Handlers=sysrq kbd event2 B: PROP=0 B: EV=3 B: KEY=ffffffff fffffffe I: Bus=0019 Vendor=0001 Product=0001 Version=0100 N: Name="all_key" P: Phys=sunxi_ts/input0 S: Sysfs=/devices/platform/sunxi-ts/input/input3 U: Uniq= H: Handlers=event3 B: PROP=0 B: EV=b B: KEY=400 0 0 0 0 0 0 0 0 0 0 B: ABS=610000 0 I: Bus=0019 Vendor=0001 Product=0001 Version=0100 N: Name="axp22-powerkey" P: Phys=m1kbd/input2 S: Sysfs=/devices/soc.0/1c2ac00.twi/i2c-0/0-0034/axp22-powerkey/input/input4 U: Uniq= H: Handlers=kbd event4 B: PROP=0 B: EV=7 B: KEY=100000 0 0 0 B: REL=0 I: Bus=0019 Vendor=0001 Product=0001 Version=0100 N: Name="gpio-keys.21" P: Phys=gpio-keys/input0 S: Sysfs=/devices/gpio-keys.21/input/input5 U: Uniq= H: Handlers=kbd event5 B: PROP=0 B: EV=100003 B: KEY=400 0 0 0 0 0 0
KEY3/4对应event1, KEY5对应event5
通过命令可以查看事件响应消息:
root@T3/A40i-Tronlong:/# od -x /dev/input/event1 0000000 5197 386d 29ed 0004 0001 0094 0001 0000 0000020 5197 386d 29ed 0004 0000 0000 0000 0000 0000040 5197 386d 2b5f 0009 0001 0094 0000 0000 0000060 5197 386d 2b5f 0009 0000 0000 0000 0000 0000100 5199 386d cae8 000b 0001 0094 0001 0000 0000120 5199 386d cae8 000b 0000 0000 0000 0000 0000140 519b 386d 0e99 000e 0001 0094 0000 0000 0000160 519b 386d 0e99 000e 0000 0000 0000 0000 0000200 519e 386d ec83 0003 0001 0094 0001 0000 0000220 519e 386d ec83 0003 0000 0000 0000 0000 0000240 51a1 386d e8be 000b 0001 0094 0000 0000 0000260 51a1 386d e8be 000b 0000 0000 0000 0000 0000300 51a2 386d 9fc6 000c 0001 0094 0001 0000 0000320 51a2 386d 9fc6 000c 0000 0000 0000 0000 0000340 51a3 386d 940e 000d 0001 0094 0000 0000 0000360 51a3 386d 940e 000d 0000 0000 0000 0000 0000400 51a4 386d a4f3 0009 0001 0094 0001 0000 0000420 51a4 386d a4f3 0009 0000 0000 0000 0000 0000440 51a5 386d 3196 000b 0001 0094 0000 0000 0000460 51a5 386d 3196 000b 0000 0000 0000 0000 // 以上为KEY3按下 // 以下为KEY4按下 0000500 51aa 386d 1cfc 000e 0001 0095 0001 0000 0000520 51aa 386d 1cfc 000e 0000 0000 0000 0000 0000540 51ac 386d c2e3 0000 0001 0095 0000 0000 0000560 51ac 386d c2e3 0000 0000 0000 0000 0000 0000600 51ad 386d 30e6 0002 0001 0095 0001 0000 0000620 51ad 386d 30e6 0002 0000 0000 0000 0000 0000640 51ae 386d e820 0002 0001 0095 0000 0000 0000660 51ae 386d e820 0002 0000 0000 0000 0000 0000700 51ae 386d dfbf 000d 0001 0095 0001 0000 0000720 51ae 386d dfbf 000d 0000 0000 0000 0000 0000740 51b0 386d 1e41 0001 0001 0095 0000 0000 0000760 51b0 386d 1e41 0001 0000 0000 0000 0000 //测试KEY5按下 root@T3/A40i-Tronlong:/# od -x /dev/input/event5 0000000 51e1 386d 3cc7 0004 0001 00ca 0001 0000 0000020 51e1 386d 3cc7 0004 0000 0000 0000 0000 0000040 51e1 386d 0853 0008 0001 00ca 0002 0000 0000060 51e1 386d 0853 0008 0000 0000 0001 0000 0000100 51e1 386d a48d 0008 0001 00ca 0002 0000 0000120 51e1 386d a48d 0008 0000 0000 0001 0000 0000140 51e1 386d b7e0 0008 0001 00ca 0000 0000 0000160 51e1 386d b7e0 0008 0000 0000 0000 0000 0000200 51e2 386d 75ab 0008 0001 00ca 0001 0000 0000220 51e2 386d 75ab 0008 0000 0000 0000 0000 0000240 51e2 386d 2702 000c 0001 00ca 0002 0000 0000260 51e2 386d 2702 000c 0000 0000 0001 0000 0000300 51e2 386d c334 000c 0001 00ca 0002 0000 0000320 51e2 386d c334 000c 0000 0000 0001 0000 0000340 51e2 386d 5f74 000d 0001 00ca 0002 0000 0000360 51e2 386d 5f74 000d 0000 0000 0001 0000 0000400 51e2 386d fbbc 000d 0001 00ca 0002 0000 0000420 51e2 386d fbbc 000d 0000 0000 0001 0000 0000440 51e2 386d 97fc 000e 0001 00ca 0002 0000 0000460 51e2 386d 97fc 000e 0000 0000 0001 0000
手册2.1还有其他外设的测试方法和例子,就不一一列出了
2. 建立开发环境, 测试交叉编译和简单的应用开发
主要参考文档2-2linux应用开发手册,代码包位于软件资料-demo目录下, 开发包提供了python和C的案例。
2.1 python应用案例
板载系统预装了python2.7, 3.7是不是支持不太确定,有机会再尝试编译安装。
例子有两个,以led_flash.py为例来测试
#!/usr/bin/env python # -*- encoding: utf-8 -*- ''' @File : tl_led_flash.py @Time : 2020/04/26 09:05:54 @Desc : None ''' # here put the import lib import signal, time import os, sys, getopt version = "1.0" class Led(object): quit_flag = False def __init__(self, led_path): self.led_path = led_path # Led path self.leds = [] # Save the led found """ enumerate all led """ def enumerate_led(self): led_name = "user-led" """ find led """ for filename in os.listdir(self.led_path): if led_name in filename: self.leds.append(os.path.join(self.led_path, filename)) if len(self.leds) == 0: return False """ led sort, e.g. /sys/class/leds/user-led0 /sys/class/leds/user-led1 /sys/class/leds/user-led2 """ self.leds.sort() print "find leds:" for led in self.leds: print led return True """ control led flash """ def flash_led(self): led_num = len(self.leds) while not Led.quit_flag: """ Turn on leds """ for i in range(led_num): """ Set the led brightness value to 1 to turn on the led """ ret = os.system("echo 1 > %s/brightness" % (self.leds[i])) if ret != 0: print "Error: Failed to turn on %s" % self.leds[i] """ Keep the leds on for 500 ms """ time.sleep(0.5) for i in range(led_num): """ Set the led brightness value to 0 to turn off the LED """ os.system("echo 0 > %s/brightness" % (self.leds[i])) """ Keep the leds off for 500 ms """ time.sleep(0.5) @classmethod def stop(cls): cls.quit_flag = True def sig_handle(signum, frame): print "ctrl + c ..." Led.stop() def usage(): print "Usage: %s [options]\n" \ "Options: \n" \ " -v | --version Display version information\n" \ " -h | --help Display help\n" \ % sys.argv[0] if __name__ == '__main__': """ parse parameter """ try: options, remainder = getopt.getopt(sys.argv[1:], 'vh', ['version', 'help']) for opt, arg in options: if opt in ('-v', '--version'): print 'version: %s' % version exit(0) elif opt in('-h', '--help'): usage() exit(0) except getopt.GetoptError as err: print 'ERROR: %s' % err exit(1) """ Ctrl+c handler """ signal.signal(signal.SIGINT, sig_handle) led = Led("/sys/class/leds/") """ enumerate all led """ ret = led.enumerate_led() """ can not find led """ if not ret: print "can not find led!" exit(3) """ control flash all led """ print "\nflash led ..." led.flash_led()
基本原理和前面单独测试led差不多,运行后,板载的两个led会闪烁。
用于写一些的简单的调试脚本应用还是挺好的,但是更有价值的库,像tcp/udp, mqtt及其他可能用到的库官方例子太少,实用性不高。
2.2嵌入式C的开发环境建立
嵌入式C开发才是主打模式,首先要建立交叉编译环境。
手册里只提到要先建立SDK编译环境,但是太重了,其实只要安装了gcc工具链就可以完成基本开发了。
hy@ubuntu:~/T3$ wget http://releases.linaro.org/components/toolchain/binaries/5.3-2016.02/arm-linux-gnueabihf/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf.tar.xz // 解压 tar -xzf gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/ // 进入代码目录,进行编译 (py39) hy@ubuntu:~/t3dev/samples/base-demos/led_flash$ cd src (py39) hy@ubuntu:~/t3dev/samples/base-demos/led_flash/src$ dir led_flash led_flash.c makefile (py39) hy@ubuntu:~/t3dev/samples/base-demos/led_flash/src$ CC=~/T3/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc make make: 'led_flash' is up to date.
编译成功,可以copy到目标开发板, 运行验证下
上位机运行
cd ../bin sudo scp led_flash root@192.168.137.48:/hy
目标开发板直接运行,带上-h查看运行帮助
root@T3/A40i-Tronlong:/hy# ./led_flash -h Usage: led_flash [options] Options: -n | --number Number of LEDs, range of 1 to 4 -v | --version Display version information -h | --help Show help content
带参数,让LED1闪起来
root@T3/A40i-Tronlong:/hy# ./led_flash -n 1 System leds : /sys/class/leds/disk /sys/class/leds/heartbeat /sys/class/leds/user-led0 /sys/class/leds/user-led1 Flashing leds : /sys/class/leds/user-led0
至此,交叉编译环境顺利建立。
-
在哪吒D1上适配移远EC20,实现4G上网
1:代码替换
用Quectel_Linux_USB_Serial_Option_Driver_20210205中linux 5.4.51文件夹下的代码,替换Tina SDK中lichee/linux-5.4/drivers/usb/serial/ 中对应的文件
Quectel_Linux_USB_Serial_Option_Driver_20210205的下载链接:
链接:https://pan.baidu.com/s/1HhChSszvXQr2YzMojGdvpQ?pwd=odfb
提取码:odfb
2:打开linux中对应的USB driver
3:重新编译系统,并且将新系统烧录到开发板上
cd /opt/d1/tina_d1_open_v2 source build/envsetup.sh lunch make kernel_menuconfig make pack
4:验证驱动安装是否成功
驱动安装成功以后,插入设备,应出现如下log:
输入:
cat /dev/ttyUSB2 & echo -e "AT\r\n" > /dev/ttyUSB2
应该出现如下提示:
则表示EC20的驱动已经成功安装。
5:PPP拨号
由于目前没有针对C906内核的ppp拨号软件,因此需要从源码重新编译;链接开源的是针对C906内核从PPP源码编译以后的PPP拨号软件,如果觉得好用,烦请点个Star:
https://github.com/tcexeexe/pppForC906/
使用方法:
(1)将
pppd
和chat
上传到/usr/bin
(2)将
quectel-ppp
,quectel-chat-connect
,quectel-chat-disconnect
上传到/etc/ppp/peers/.
默认的拨号脚本是针对联通的(3)使用
pppd call quectel-ppp
拨号联网拨号成功后,输入ifconfig,出现ppp0相关网络配置,则标识拨号成功,此时就可以顺利上网
由于4G模块基本都是使用3GPP的标准AT指令,所以例如高新兴,SIMCOM等厂家的模组,也可以试用上述流程,区别在于USB的vender ID和Product ID不同,这个需要根据模组的手册修改。
-
D1开发板操作gpio端口的简单方法以及ADB的连接方法
准备操作
作为一名萌新,在如何操作gpio端口上,历经千辛万苦,查阅各种资料。
首先是根据同样是发布在平头哥开发社区的博文,链接如下 https://bbs.aw-ol.com/topic/349/ 是文件操作gpio端口,代码易读懂,但是代码量太大了。对有些部分,像是打开文件,进行读写操作的一块进行,可以简化一些,但是要控制多个gpio端口,还要多次复用,实在是不好用。所以在写完小车动起来的程序后,就想着有没有更简单的方式。
找到了官方提供的gpio开发指南,利用的是设备树和Pinctrl和gpio子系统操作gpio,花了两天时间终于弄了个大概明白,想上手开始做,发现没找到一个完整的案例,不知如何入手。
于是搜搜查查,最后回归了简单的终端操作,将终端操作用命令和shell脚本来操作方便同时操作多个gpio端口。更简单了,但是没学过脚本语言,准备开始学习基本知识的时候,发现了一篇博文,什么都解决了。
链接如下:点这个理
C语言代码里操作gpio
此文里面有一个板块为C语言代码里操作gpio,代码短短几行,用了system()函数来操作echo等,很类似终端操作,但又更方便了。 于是操作gpio变成了这样
- 将大部分操作宏定义
#define EXPORT_GPIO2 "echo 2020 > /sys/class/gpio/export" #define EXPORT_GPIO3 "echo 2021 > /sys/class/gpio/export" #define EXPORT_GPIO4 "echo 2022 > /sys/class/gpio/export" #define UEXPORT_GPIO1 "echo 2027 > /sys/class/gpio/unexport" #define UEXPORT_GPIO2 "echo 2020 > /sys/class/gpio/unexport" #define UEXPORT_GPIO3 "echo 2021 > /sys/class/gpio/unexport" #define UEXPORT_GPIO4 "echo 2022 > /sys/class/gpio/unexport" #define GPIO1_OUTPUT "echo out > /sys/class/gpio/gpio2027/direction" #define GPIO2_OUTPUT "echo out > /sys/class/gpio/gpio2020/direction" #define GPIO3_OUTPUT "echo out > /sys/class/gpio/gpio2021/direction" #define GPIO4_OUTPUT "echo out > /sys/class/gpio/gpio2022/direction" #define LOWGPIO1 "echo 0 > /sys/class/gpio/gpio2027/value" #define LOWGPIO2 "echo 0 > /sys/class/gpio/gpio2020/value" #define LOWGPIO3 "echo 0 > /sys/class/gpio/gpio2021/value" #define LOWGPIO4 "echo 0 > /sys/class/gpio/gpio2022/value"
- 一些操作语句,简单明了
void INIT() { system(EXPORT_GPIO1); system(EXPORT_GPIO2); system(EXPORT_GPIO3); system(EXPORT_GPIO4); system(EXPORT_HW1); system(EXPORT_HW2); system(EXPORT_HW3); system(EXPORT_HW4); system(GPIO1_OUTPUT); system(GPIO2_OUTPUT); system(GPIO3_OUTPUT); system(GPIO4_OUTPUT); system(HW1_INPUT); system(HW2_INPUT); system(HW3_INPUT); system(HW4_INPUT); } void RUN() { system(LOWGPIO1);//0 system(HIGHGPIO2);//1 system(HIGHGPIO3);//1 system(LOWGPIO4);//0 }
- 但是由于没有办法system(cat...),得到value的值只能用文件方式来读出,但也将代码简化了很多。
int GETHW(int gpio) { char in[3] = {0, 0, 0}; char buf[50]; int nread, gpiofd; sprintf(buf, "/sys/class/gpio/gpio%d/value", gpio); gpiofd = open(buf, O_RDWR); if(gpiofd < 0) { fprintf(stderr, "Failed to open gpio %d value\n", gpio); perror("gpio failed"); } do { nread = read(gpiofd, in, 1); } while (nread == 0); if(nread == -1){ perror("GPIO Read failed"); return -1; } close(gpiofd); return atoi(in); }
D1开发板的gpio引脚
我们项目的小车选用的是gpio2020~gpio2027这八个gpio引脚,其中四个引脚用来控制车轮的运动,四个引脚用来接收红外传感器传送过来的信号。这八个引脚分别对应的是pp0~pp7,
根据这两张图片结合,我们就知道了gpio2020~gpio2027这四个分别在什么位置。
查看gpio引脚值,对gpio引脚操作分为简单的几步:
- 导出gpio值,命令:echo 2020 > export
- 设置方向,输入为:echo in > direction输出为:echo out > direction
- 查看value值:cat value ( 注意工作目录 )
- 设置value值,如果gpio口被定义为输出时,可以设置gpio值为1或者0,1为高电平,0为低电平 echo 1 > value
- 不用就 echo 2020 > unexport
ADB使用和编译程序
设备连接
我们在将已经编译好的程序代码传送到哪吒开发板上时,使用的ADB工具。设备连接正常后,桌面上有显示图标:
那个对勾表示已经连接上ADB,如果有Allwinner Technology Inc. Tina ADB但是前面没有对勾,就点一下,要是没有这个选项,就重插一下开发板。
交叉编译
- ADB安装好以后,先在Ubuntu下新建一个.c文件,然后编译:
编译是交叉编译,交叉编译就是编译和运行是分开的,即编译在电脑的Ubuntu上,运行在哪吒开发板上进行。
根据全志社区中的提示:编译工具链在
tina/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702
中编译命令是:
/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/riscv64-unknown-linux-gnu-gcc -o car1 car1.c
- 其中编译命令可以根据编译工具链存放的位置进行调整,我们编译工具链存放的位置是:
tina-D1-H/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702
所以编译命令略微调整为:
tina-D1-H/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/riscv64-unknown-linux-gnu-gcc -o car car.c
我们一开始遇到的问题提示为找不到目录。后来发现是因为一开始目录不对。
- 编译好.c文件后,执行adb push car ./.就将编译好的程序下载到开发板上
进入开发板:用adb shell命令
进入开发板以后,在/root目录下找到car程序,赋予文件可执行权限chmod +x car,然后运行 ./car,见下图:
最后希望哪吒开发板也能拥有专门的操作gpio的函数和接口,方便大家使用。
本文内容为【玄铁杯第二届RISC-V应用创新大赛】作业
作者:智航追迹队
原文链接:https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300636.0.0.429d180fqgpDV3&id=4094212597694402560 -
开机启动脚本写入 /etc/resolv.conf 脚本执行不完全
请教一下,我在Tina下的/etc/rc.local里面增加了一个开机启动的脚本,目标是上电以后写入DNS SERVER地址到/etc/resolv.conf里面,但是现在好像只执行了红框里面这句话,没有执行绿框里面这句话,开机后/etc/resolv.conf这个文件里面还是空白,这个可能是什么原因呀
-
Tina下 DNS配置好后 重启消失问题
请教一下各位大佬,在Tina下配置DNS时,在/etc/resolv.conf写入DNS的nameserver,写好以后是OK的,可以正常Ping通网址。但是重启以后,/etc/resolv.conf的内容就消失了,这个是什么情况