建议加入ide,STC的ide直接可以看各个模块的手册,直接贴出各个模块的代码,简单用可以,想深入理解也可以,组织好资料了。
别用eclipse那套,太重了。
arduino也有,可以用于调试。
Kirin 发布的帖子
-
回复: 开发者之声
-
回复: 关于D1开发板SD卡启动 系统镜像分区问题?
@allwinnertech 可以看下服务平台的这份打包文档看对您有没有帮助:
https://one.allwinnertech.com/#/doc?menuID=2
-
回复: 小哪吒产品规格共创
为什么不做display接口那种只贴单面的核心板呢?
:因为我们其实没有产品量产的需求,只是希望给开发者更方便易容的SBC,同时我希望能够把样片、bom list、生产文件都给到开发者,如果有开发者有量产产品需求,可以自己基于这些东西改一改就能打板了。毕竟开发者那么多,千人千面,每个人都有不同的需求,我们无法在一块板子上都满足,所以我们做好公共性和平台性的东西就好 -
回复: 开发者之声
今天有开发者反馈引脚和树莓派引脚兼容,之前树莓派的配件插上就能用,真的很开心的,当初辛辛苦苦做成和树莓派一样,就是为了方便开发者兼容,果然还是有开发者可以感知到的。
其实作为在开发和技术支持岗位上工作过多年的产品经理,自以为很了解当前AIoT品类产品的功能需求,自己也有很多想法,并且可能这些想法会更适合实际开发者,但是跟随大众产品的脚步,做成标准化,也是一个需求,可以帮助产品更快地兼容或者被兼容,从而融入主流产品线 -
回复: 小哪吒产品规格共创
还是想做成SBC,让大家插上就能用那种,因为现在和我们一起玩的开发者都是做SBC的。后面会开放样片购买、bom list和硬件设计图,如果想做核心板的话,自己拿来改改就能生产(这个需要老板同意) -
回复: 小哪吒产品规格共创
SD卡槽:是否需要?当前想法是只做预留点位,但是实际不贴卡槽
如果不贴不拓展的话,板载的nand贴256M,是可以满足一般AIoT类产品的研发需求的,但是要存大容量的东西就另说了 -
回复: 小哪吒产品规格共创
如果是做核心板,会更加考虑拓展性和贴在其他拓展版、面包板上用,这样的话:
1.USB会采用type-c,和手机、哪吒板报保持一致,这样就能像U盘一样直接插在电脑、usb hub或者适配器上使用;;
2.板子上方贴哪吒的disp排线,线序保持一致,这样方便直接做成产品板; -
回复: 小哪吒产品规格共创
想要明确配置的优先级,首先需要明确要做的这个板子是给哪些人用、他们又用来干什么。
如果是给开发者开发用,我会选择的方向的SBC(single board computer),既然是computer,那就要方便易用,外围设备标准化且易获得,我会选择的配置是:
1.USB采用USB A型公口,这样就能像U盘一样直接插在电脑、usb hub或者适配器上使用;
2.DISPLAY使用标准HDMI,这样就能通过我们比较普遍的HDMI显示器输出;
-
回复: D1为什么没有把2路GPADC引出来
@qhddz 是的,30pin的话愿意是给麦克风用的,需要线序对上的专门的排线,我们有做带按键的麦克风子板。但是如果是用做GPADC的话,觉得还是单独放在插针的地方比较好,这样插上去就能用,也不会和麦克风子板冲突,以免硬件没有集成的时候插了麦克风子板就不能用您说的这些传感器了
-
小哪吒产品规格共创
早在去年11月,sipeed就在twitter上发了一篇推文,表示将要做一款RISC-V的单板,售价12.5美元,按照当时的汇率约为人民币83元,在当时引发轰动。
但是最近半年随着电子元器件市场的剧烈动荡(产能不足、缺货、交期长、价格上涨),这一计划难以实现。
但是现在随着开发者的呼声越来越高,我们决定顶着压力重新把这一计划重新提上日程。
为此,我们先做了一个产品原型,但是由于成本的限制,还需要做很多取舍,在这里我也好不避讳地直接拿出来和大家一起讨论,在产品概念阶段,就把这个产品做成“开源”的,旨在和广大开发者们一起【共创】产品
-
回复: 全志D1裸奔工具XFEL
@bedrock 在 全志D1裸奔工具XFEL 中说:
有没有 芯片 寄存器的参考 或者后续 有没有封装库函数的打算 ,
还挺期待,这个裸机跑起控制算法 能起飞
@bedrock 全志客户服务平台里可以下载到user manual啊,里面啥啥都有了。
裸机跑起控制算法主要是想干啥?(好奇 收集一下大家的使用场景) -
回复: 哪吒D1-年轻人的第一块RISC-V开发板开箱
@iamliubo 感谢您这么详细的评测,感动(捂脸哭.jpg
哪吒开发板的slogan是“不负所爱 自创奇迹”,我们的slogan是“不负开发者的热爱”,希望给大家提供更多更好的东西,respect!
-
韦东山老师即将基于D1哪吒开发板录制嵌入式学习课程
韦老师课堂开课啦~
在国内嵌入式培训教父韦东山老师的百问网主页上,可以看到已经上架了D1哪吒开发板的学习专区(敬请期待状态)。目前韦老师正在基于板子进行课程规划,很快就会上架培训视频。
后续韦老师会从MCU裸机-RTOS-Linux-更高阶系统这一嵌入式由浅入深的学习路径,全系基于全志芯片平台推出嵌入式学习教程,大力推进课程平台国产化,并重点向RISC-V架构推进。
百问网首页:https://www.100ask.net -
回复: 【加精】在Ubuntu21.04中编译Tina SDKV1.01 版本 踩坑记录
@bedrock 感谢小大佬的分享,官方将送出麦克风子板一块作为分享奖励。更多交流欢迎加入全志在线官方交流qq群:498263967
-
回复: D1开发板初次编译uboot
xxxx@AwExdroidxx:~/workspace/d_tina_d1_open_v1.0$ source build/envsetup.sh Setup env done! Please run lunch next. xxxx@AwExdroidxx:~/workspace/d_tina_d1_open_v1.0$ lunch You're building on Linux Lunch menu... pick a combo: 1. d1_nezha_min-tina 2. d1_nezha-tina Which would you like? [Default d1_nezha]: 2 ============================================ TINA_BUILD_TOP=/home/xxxx/workspace/d_tina_d1_open_v1.0 TINA_TARGET_ARCH=riscv TARGET_PRODUCT=d1_nezha TARGET_PLATFORM=d1 TARGET_BOARD=d1-nezha TARGET_PLAN=nezha TARGET_BUILD_VARIANT=tina TARGET_BUILD_TYPE=release TARGET_KERNEL_VERSION=5.4 TARGET_UBOOT=u-boot-2018 TARGET_CHIP=sun20iw1p1 ============================================ xxxx@AwExdroidxx:~/workspace/d_tina_d1_open_v1.0$ mboot mboot mboot0 xxxx@AwExdroidxx:~/workspace/d_tina_d1_open_v1.0$ mboot d1_nezha d1 d1-nezha build_boot platform:sun20iw1p1 o_option:uboot Prepare toolchain ... build for sun20iw1p1_defconfig ... CHK include/config/uboot.release CHK include/generated/timestamp_autogenerated.h CHK include/config.h CFG u-boot.cfg CHK include/generated/version_autogenerated.h CHK include/generated/generic-asm-offsets.h CHK include/generated/asm-offsets.h
编出来的uboot在d_tina_d1_open_v1.0/device/config/chips/d1/bin下
-
回复: D1哪吒PhoenixSuit烧录问题
@bill_j 看log设备是正常的,大概率是电脑没有装全志USB驱动,详见:https://d1.docs.allwinnertech.com/source/2_gettools/#usb
-
开发者之声
针对友商基于自家芯片的开发板,我们在烧写方面得到的好评是最多的,我们有自己的烧写软件,windows版本和linux版本的都有,同时也支持卡烧写,也提供了制作烧写卡的固件,总体来说我们在烧写方面做得是比友商好的。
但是我们提供的Tina系统的构建方式和一些已有的系统构建不一样,现在主要是openwrt那套,我们还做了一些修改。yocto我们不支持,其实这个以前支持过,但是实际项目正面并不实用,学习成本较高,国内中小企业研发不喜欢用。buildroot我们内部是支持的,但是没有对外释放,对外释放只有openwrt tina。
有的大厂把 bootloader kernel rootfs APP 分开,这一块我们有考虑,但是当前人力情况还没来得及做这些事情,而且需要积累更多开发者使用经验后才能确定怎么去做才能做得好。
有一些友商做的可以参考:
TI的SDK Wiki页面
https://software-dl.ti.com/processor-sdk-linux/esd/docs/latest/linux/Overview.html
这是NXP imx6ull的
https://www.nxp.com/products/processors-and-microcontrollers/arm-processors/i-mx-applications-processors/i-mx-6-processors/i-mx-6ull-single-core-processor-with-arm-cortex-a7-core:i.MX6ULL?tab=Documentation_Tab
这是stm32mp1的
https://wiki.st.com/stm32mpu/wiki/STM32MP1_Developer_Packagehttps://www.st.com/en/microcontrollers-microprocessors/stm32mp1-series.html#documentation
这些是友商们针对自己的开发者场景做的,但是我们的芯片和开发板定位的领域是不一样,可能有些不一样的做法,需要继续摸索。树莓派的做法是比较有普适性的,这是树莓派的针对初学者的开始页面:
https://projects.raspberrypi.org/zh-CN/projects/raspberry-pi-getting-started这是树莓派针对于高级玩家的文档开始页面:
https://www.raspberrypi.org/documentation/我们需要不断学习摸索,给开发者提供更好的环节,不负开发者的热爱。
-
【关于我们】全志在线开发者社区介绍
全志在线开发者社区正式上线啦!
『全志在线开发者社区』是全志科技全资子公司全志在线运营的开发者交流平台,包括在线文档、资料下载、购买渠道、开发者学院和技术论坛几大板块,旨在为芯片/嵌入式/智能产品开发者提供一个交流学习的空间,并重点支持RISC-V生态的推广。
首页网址:
https://www.aw-ol.com/-
【在线文档】
在线文档板块为开发者提供了可以初步了解芯片规格和开发板功能的文档介绍,大到系统框架,小到串口线序,都写得详详细细,可以帮助开发者快速上手开发板,完成源码下载、系统编译、固件烧写和基础功能调试等开发准备工作。
-
【资料下载】
资料下载页面为开发者提供了常用的开发工具,如固件烧写工具PhoeniSuit、压盘工具PhoenixCard、写号工具DragonSN等,还提供了各平台的标准测试固件、Demo以及合作伙伴们提供的【威力加强包】
*注:更多更详细深入的开发文档,请登录AW服务平台-文档中心下载 -
【购买渠道】
购买渠道为开发者提供了一个可以方便快捷地买到开发板、芯片外设配件的平台,同时也欢迎更多的渠道和代理商入住。
-
【开发者学院】
开发者学院为广大开发者提供了大量学习课程视频,通过流媒体的方式为Z世代的新生代开发者们提供更合适的学习路径。
-
【技术论坛】
技术论坛为开发者们提供了一个交流互助的平台,这里谈笑有鸿儒,这里往来也有白丁。在这里你有机会免费获得价值2000元一小时的原厂工程师技术支持,也可以分享你代码编不过的疑惑。同时你还可以发布你改变世界的想法,慕友同行,一起杨帆智能产品开发的星辰大海!
-
-
【求救】D1-哪吒开发板启动异常
D1-nezha开发板启动异常,上电的时候log卡住不动了,电源灯亮,但是系统固件里写好的绿灯闪烁没有亮。
复现概率:非必现,多重复几次拔插电回出现
串口log:[188]HELLO! BOOT0 is starting! [191]BOOT0 commit : 2337244-dirty OpenSBI v0.6 ____ _____ ____ _____ / __ \ / ____| _ \_ _| | | | |_ __ ___ _ __ | (___ | |_) || | | | | | '_ \ / _ \ '_ \ \___ \| _ < | | | |__| | |_) | __/ | | |____) | |_) || |_ \____/| .__/ \___|_| |_|_____/|____/_____| | | |_| Platform Name : T-HEAD Xuantie Platform Platform HART Features : RV64ACDFIMSUVX Platform Max HARTs : 1 Current Hart : 0 Firmware Base : 0x40000400 Firmware Size : 75 KB Runtime SBI Version : 0.2 MIDELEG : 0x0000000000000222 MEDELEG : 0x000000000000b1ff PMP0 : 0x0000000040000000-0x000000004001ffff (A) PMP1 : 0x0000000040000000-0x000000007fffffff (A,R,W,X) PMP2 : 0x0000000080000000-0x00000000bfffffff (A,R, U-Boot 2018.05-00107-gc22c3d075c (Apr 24 2021 - 07:52:58 +0000) Allwinner Technology [00.429]DRAM: 1 GiB [00.431]Relocation Offset is: 3deeb000 [00.435]secure enable bit: 0 [00.438]CPU=1008 MHz,PLL6=600 Mhz,AHB=200 Mhz, APB1=100Mhz MBus=300Mhz initr_ledc unable to find ledc node in device tree. [00.449]flash init start [00.451]workmode = 0,storage type = 0 [00.457]sunxi-spinand-phy: not detect any munufacture from id table [00.464]sunxi-spinand-phy: get spi-nand Model from fdt fail [00.469]sunxi-spinand-phy: get phy info from fdt fail device nand0 <nand>, # parts = 4 #: name size offset mask_flags 0: boot0 0x00100000 0x00000000 1 1: uboot 0x00300000 0x00100000 1 2: secure_storage 0x00100000 0x00400000 1 3: sys 0x0fb00000 0x00500000 0 active partition: nand0,0 - (boot0) 0x00100000 @ 0x00000000 defaults: mtdids : nand0=nand mtdparts: mtdparts=nand:1024k@0(boot0)ro,3072k@1048576(uboot)ro,1024k@4194304(secure_storage)ro,-(sys) [00.807]ubi0: attaching mtd4 [01.204]ubi0: scanning is finished [01.213]ubi0: attached mtd4 (name "sys", size 251 MiB) [01.218]ubi0: PEB size: 262144 bytes (256 KiB), LEB size: 258048 bytes [01.224]ubi0: min./max. I/O unit sizes: 4096/4096, sub-page size 2048 [01.230]ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096 [01.237]ubi0: good PEBs: 1004, bad PEBs: 0, corrupted PEBs: 0 [01.242]ubi0: user volume: 9, internal volumes: 1, max. volumes count: 128 [01.249]ubi0: max/mean erase counter: 2/1, WL threshold: 4096, image sequence number: 0 [01.256]ubi0: available PEBs: 0, total reserved PEBs: 1004, PEBs reserved for bad PEB handling: 40 [01.265]sunxi flash init ok [01.268]line:714 init_clocks __clk_init: clk pll_periph0x2 already initialized register fix_factor clk error [01.278]drv_disp_init partno erro : can't find partition bootloader ** Unable to read file lcd_compatible_index.txt ** [01.515]do_fat_fsload for lcd config failed request pwm success, pwm2:pwm2:0x2000c00. [01.529]drv_disp_init finish [01.532]boot_gui_init:start [01.535]set disp.dev2_output_type fail. using defval=0 [01.726]boot_gui_init:finish [02.139]LCD open finish partno erro : can't find partition bootloader 54 bytes read in 0 ms [02.300]bmp_name=bootlogo.bmp size 38454 38454 bytes read in 4 ms (9.2 MiB/s)
-
回复: D1 Tina SDK
@march 你再添加一次,看下是不是提示“公钥已存在”,然后根据操作直接下载,看有没有权限。按道理应该是有权限了,只不过显示那里有延迟还没显示出来
-
回复: 【素材汇总】D1开发板图片素材汇总
包装盒展开图:
包装盒上加上了开发板框图、插针线序以及在线文档的二维码,不仅仅是一个包装,还是开发辅助工具,可以方便开发者开发,可以说是非常贴心了 -
【转载】探游·R329·AI部署实战(二)移植搭建AI环境
文章转自:极术社区 https://aijishu.com/a/1060000000198659?_ea=6508232,作者 zhangxiaolong
前言
hello呀~我又来啦~这一期拖了好久啦~由于周末抽时间做的,时间不稳定,抱歉呐~上次做了R329的第一期,也就是解决了配置R329开发板并跑起来的问题;
这一期能解决的问题是:你能用R329上的AIPU跑个resnet50啥的,你能用R329的CPU跑起来NCNN,跑个resnet50,mobilenet啥的,并对比性能数据。ps. 关于自定义模型如何在AIPU上跑,如YOLO_XX,KWS_XX等,就是下一节的内容啦~当然按照惯例,我会先教你们把环境搭建好;
这一期大概要解决的问题如下:
- ”我要怎么样才能在R329上跑模型的呀?不要多了,能跑你们官方的demo就行,我主要想对整体的开发流程有个主观印象。”
2.”我想跟NCNN跑的数据做对比,我该如何在R329上移植NCNN并跑benchmark的呀?要怎么准备环境、怎么跑的呀?“
3.“我要跑自定义模型该如何操作的呀?”
4.”我的模型贼复杂,有前后处理balabala的,我想一部分在CPU上做一部分在AIPU上做(这有个装逼的名字叫"切图"),这要怎么搞得呀?“
我相信上述的这些问题,对大部分非经验丰富的开发者来说,是有一点点困扰的吧!?
因此本着传播知识的初衷,我将从底层细节一点点带大家开荒R329,尽量讲清楚为什么这么做的原因,而不是机械的教大家去操作。
同时,为了尽可能照顾到不同开发环境的童鞋,我准备了两个版本的开发环境,一个是WIN10自带的WSL(ubuntu18),一个是虚拟机下的ubuntu14.04, 目的是为了尽可能的把坑给踩完先。
第一节 我要怎样才能在R329上跑起来AIPU的呀?
可能有小伙伴不想看啰嗦的分析,只想一步到位跑起来呀,所以,请跟着我左手右手一个慢动作。。。。1.先跟着教程第一章把板子准备好,注意此时的板子的linux kernel驱动是有的,但是没有把AIPU的runtime库编译进去的。
2.从【点击这里】获取下载链接,得到lib库文件;从【这里这里】下载resnet50 demo的执行文件。
3.将libaipudrv.so*文件放到开发版的/lib目录下(用usb的话直接adb push就好啦, 用wifi传的话就直接scp下载了);
4.将resnet50文件夹放到开发版的/etc/zhouyi/目录下即可;
5.运行sh脚本, 加上参数-C resnet_50即可;加上time指令就大致知道花了多少的时间啦~下面就是详细的分析啦,不想看我叭叭的就直接跳过哈~
要能跑起来AIPU首先驱动层得支持,其次runtime库也得支持,接着我们才可以在应用层调用AIPU;
这里得好消息是驱动默认就支持了,坏消息是runtime库一时半会还不会完全开源,因此我们需要先解决runtime库得问题。
上期我们说过了,由于AIPU的知识产权是属于ARM china的,所以全志暂时是不会开放出来给我们使用的(对应的就是在开发的源码中把这一部分库代码给删除了)
*【转载者注】在获得ARM中过同意之后,全志已经将这部分源码以补丁的形式在其平台上加回来了但值得注意的是内核驱动时有支持的,既然有内核驱动,因此我们只需要在库层面添加用户runtime包就可支持AIPU啦~
啥?你问这个runtime包是啥? 这个runtime包的定义在不同语境里都不一样的,在这里代表的就是对AIPU驱动的一层封装;常规的嵌入式开发流程里面,有个外设,你要在应用层调用它,你就得 直接用read/write/ioctl等一系列操作来控制这个设备,很原始很低效,于是我们就在此基础上封装出一个库,来屏蔽底层的繁琐细节,这就是runtime库存在的意义。
理论可行,但实际上这个包一般也是拿不到的,因为官方没开放也没开源呀~
头疼,俗话说的好,万事开头难在,中间难,后面也难,既然都这么难了,那我选择躺好,选择求助官方。
于是经过三分钟的对话沟通,我从ARM china官方接口那获取到了runtime库的lib包,因此我会把该文件分享给有需要的人,以及教会大家如何使用它。
把这些文件给adb push *** /etc/zhouyi/即可,记得把libaipudrv.so/libaipudrv.so.3/libaipudrv.so.3.5.3全部复制到开发板的/lib/目录下;
跑出来的效果如下:
可以看到用户空间的耗时大致是10ms的样子,于是我们就可以根据数据分析一波了:Resnet50 OPs INT8
MAC 3857973248 3.8G
OUT 35778536 35MB
PARA 25557096 25MB
我们知道resnet50的理论计算量大概是4Gops,而我们AIPU的理论算力是128MAC *0.8Gpbs=102.4GOPS因此理论峰值算力下的FPS为:FPS=102.4/4=25FPS
而真实的算力约为10FPS,算力仅利用完一半不到,也就是可以大致推断出访存部分是瓶颈,嗯,访存带宽的问题没有做好呀~
做优化的都知道,访存其实这个也好分析,resnet中存在大量的3X3跟1X1卷积层,这些卷积层在硬件底层都是由脉动阵列进行计算的,而3x3的卷积属于计算密集型,实际上MAC利用率能达到百分之八九十,
而1x1卷积属于访存密集型,也就是说巨大的算力往往都在等数据ready,实际中MAC利用率也就50%左右的样子,因此这个帧率跟最终的结果就对上啦~
嗯,其他的硬件如CPU,GPU、NPU都可以这么分析,基本原理都是一样滴哇~
第二节 我要怎样才能用R329的双核A53上跑起来NCNN呀?
这部分看下如何使用交叉编译链!上一篇中我们简单使用了gcc编译了个helloworld,可以正常运行,但是用g++则不行,后来百般调试无果之后,直接选择放弃官方提供的prebuild工具链。
我们自己动手丰衣足食。
思路是这样子的:
- 先去板子上确认交叉编译器的版本,然后选择比这个版本低的来编译NCNN,因为发布的版本向后兼容,不会向前兼容的呀。
- 在ubuntu上下载对应版本,解决其中出现的一些问题,链接到合适的版本,balbala~很碎所的,这就是为什么叫开荒的由来了!
- 下载NCNN源码,配置好CMAKE,然后修改并编译好benchmark文件,解决其中出现的一大堆问题;
- 跑benchmark,看数据~
我特意在几个版本的环境下编NCNN,期间出现了很多基本问题,虽然不是很难,但我知道总有一部分读者是需要的,需要这些“显而易见”的指引的,往往前行路上的一颗绊脚小石头就可能会阻碍你的脚步、消融你的激情,因此我希望我写的内容不单单是冰冷的技术分享,而应当是有温度的包容,这是我敲下这行字时想到的。
所以,我这里不计其繁地一一记录如下,大家权当debug手册来用吧~
要知道编译器版本,我们先去板子上看下交叉编译的版本,怎么看呢?
我们去lib目录下,系统库文件都在下面呢!
用ldd指令可以看到libc.so使用的GCC 版本是6.4.1,因此我们在ubuntu下直接安装小于等于这个版本的GCC就行啦~
通用的方法是去官网下载:
但是我们可以简化处理,直接再ubuntu下在线下载安装。
由于我们得宿主机是ubuntu14.4,因此先看下有哪些版本得交叉编译工具可以下载:
可以看到,针对arm64的,只有4.8的版本,4.8的版本比R329的6.4.1版本低,因此编译出的文件送到板子上理论上可以运行。
然后再下载一个不带版本的GCC、G++:
此时可以发现安装的版本对应上啦,gcc version 4.8.4 ubuntu/linaro;
这个时候我们再验证下helloworld看看,这个时候gcc g++都得验证下:
然后我们看下ELF头信息:
可以看到对应的是aarch64,对应上了~可以整活了~然后,直接把编译好的gcc/g++ 版本helloword, 通过adb push推送到开发板上执行,此时发现
ok啦~
一切都好起来啦~然后我们开始编译复杂点的NCNN。
git clone https://github.com/Tencent/ncnn.git
cd ncnn
mkdir -p build-aarch64-linux
cd build-aarch64-linux
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake ..
make -j8
make install
按照官网流程,一套组合拳直接打下来,看现象:
编译到36%直接报错,说是找不到某个layer的某个方法,一顿查,发现是交叉环境没装全:sudo apt install g++-arm-linux-gnueabi g++-arm-linux-gnueabihf g++-aarch64-linux-gnu
补全后,再编译,发现最后链接时出问题啦又:
这里卡了好久,为啥不行,百般查询之后发现,是源的选择不对,我选的是阿里源,在这个源下只有4.8版本的可以安装,因此我们换一下,换成清华源:
# 清华大学源 deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse ##測試版源 deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse # 源碼 deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse ##測試版源 deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
具体操作如下:
修改源文件 sources.list: Ubuntu 的源存放在在 /etc/apt/ 目录下的 sources.list 文件中, 修改前我们先做个备份,在终端中执行以下命令: sudo cp /etc/apt/sources.list /etc/apt/sources.list.bcakup 然后执行下面的命令打开 sources.list 文件,清空里面的内容,把上面我们编辑好的清华的源复制进去,保存后退出。 sudo gedit /etc/apt/sources.list 更新软件列表和升级,在终端上执行以下命令更新软件列表,检测出可以更新的软件: sudo apt-get update 在终端上执行以下命令进行软件更新: sudo apt-get upgrade
此时再检查下有哪些交叉编译器版本:
可以看到5,6,7,8版本都有的,此时我们只需要选择一个版本安装就行啦!
选择哪个版本?当然是小于等于开发板的版本呀!前面查过开发板的是6.4.1版本,这里的6版本安装后发现是6.5.0版本的,因此不行的,我们只能用5开头的版本(当然7版本的我也试过,NCNN没出什么问题,但是不排除今后移植其他三方软件的时候出问题,因此稳妥起见这里用5开头的版本):
先把之前的6.4.1版本的aarch64-arm-linux-gnu gcc/g++都删掉:
sudo apt-get remove *(注意:把依赖也要删除干净,用autoremove指令。)
然后安装之后发现aarch64-linux-gcc/g++ 链接到的不是5开头的编译器,因此修改软连接ln -snf /usr/bin/aarch64-linux-gnu-gcc-5 /usr/bin/aarch64-linux-gnu-gcc;
好啦终于把NCNN编译出来啦,由于我们只跑benchmark,因此直接在build目录下找benchnn,推到板子上运行,注意对应的param文件也要推进去哟:
好家伙发现,直接内存爆掉了,一想也对,毕竟就256M内存,看一下剩余多少?
开机就只剩余71M内存,内存不够的呀,怎么办?
- 修改镜像让CAM分配少一点内存给AIPU;
- 修改ncnn的benchmark.cpp 使用inplace轻量内存模式,不开数据重排(数据重排可以使CPU加速的哟,这块我贼6,有空给大家叨叨);
方案一得该内核,太麻烦了,于是我直接改NCNN benchmark.cpp了,只跑mobilenet系列:
嗯结果出来啦,我跑得是A53单线程,理论峰值算力一二十个GFlops,加上访存得固有缺陷,因此跑出这个数据也是阔以理解的。
我们能得到的结论就是: AIPU大法好呀~
第三节 我要怎样才能跑自己的模型呀??
好的,至此,从下往上看,我们的硬件能跑起来了,AIPU驱动是ok的了, runtime环境也ok了(见附录:如何编译第三方package),接下来就可以到AIPUBuilder部分了,这部分是整个AI软件部分的核心部件,也就是能让你自己的模型在R329上跑起来的关键了。
jio逗嘛嘚~~等等。。。
肯定有人要问的啦,“啥啥啥?咋又出来个AIPUBuilder?这是啥?干啥用的?怎么用?
你之前整了这么多出,啰嗦了这么多,我都整晕了,你就从我使用者的角度出发,告诉我这个是啥?能解决啥问题?”
······
·······好的,好的,不要再骂了,我错了,我知道错了,是我写博客流程有瑕疵了,我已经深刻地认识到了我的错误了~
但是我还敢.......还敢不改(国家一级精分表演大师show场。。。)
各位大佬们此时此刻恰如彼时彼刻:
好liao好liao,不自娱自乐了,正式开整(真好,想怎么写怎么写,想怎么乐怎么乐~周末还能宅一天):
我们看问题采用黑盒模型,输入是啥,目标(输出)是啥:
输入:是一个模型,可能来自pytorch/tensoflow/tflite/onnx/caffe….等等格式;
目标:就是把这个模型部署到R329硬件板子上,能跑起来看到效果,语音就能答应你,人脸识别就能认出你。
可以看到我们有头(输入),有尾(目标)了,因此只要在两者之间填充亿点点细节
我们的AI模型就在R329上跑起来啦~ 怎么样是不是很简单呀~
这个部分分三个阶段:
大致讲下AIPUBuilder是啥,能干啥;
准备AIPUBuilder的环境;
使用AIPUbuilder生成目标bin文件;(划掉,这次不想细写)
AIPUBuilder能干啥?
你看我们的模型来自五湖四海吧(pytorch/tensoflow/tflite/onnx/caffe….),是不是格式都千奇百怪,算子也是奇形怪状,这么多的差异要跑到特定的(固定的、单一的)硬件上来,那就可以简单认为是一个多对一的接口呀!
说个时髦一点的词,就是AI编译器啊!
说到AI编译器,我们可以看一篇2020年8月份的综述:《The Deep Learning Compiler: A Comprehensive Survey》
上面的图我大致解释下,所谓的AI编译器,分为前端跟后端,前端对接各种训练框架,把模型解析了,然后做各种与硬件无关的图优化,量化啊啥的,分的细一点的话这部分也会产生上层IR表示。
后端就是用来对接不同的硬件的,标准的AI编译器是要能对接任意硬件后端的,跟硬件相关的话简单来说就是各种算子实现了,基于各种不同硬件的算子实现,在这个层面就有各种优化策略,与上层的IR表示有所差异,因此一般会产生底层IR表示;
而R329的AIPU由于不是做通用的编译器,不需要支持很多的硬件后端,因此结构可以优化一下,比如只用一套IR表示、上层图优化与底层硬件绑定等等,当然其他的通用优化这里也都能做。
因此按照行业标准流程我们可以大致分为parser、quantization、graph optimizer、compiler,builder等等部分,但是为了简化用户操作,只留一个aipubuild的接口,具体怎么使用下一节再说。
我们简单解释下IR作用是啥?
上述的几个大的部分,就好比人的脑袋、躯体、手脚,这些部分之间需要一个东西来互相通信,在人体里面是神经系统,而在AIPUbuilder里面就是IR了,即中间表示。
IR是一套内部定义的标准让各个模块都按照这个标准来处理模型信息,厂商不同标准也不同的,比如intel的openvino里面用的肯定跟我们不一样了。
好了,到这基本解释清楚,AIPUBuilder是干啥的了!一言以蔽之:“AI 编译器”,负责将AI模型编译成能在AI芯片上跑的目标bin文件。
AIPUBuilder环境配置
咱们接着在说下如何配置AIPU的环境,使之能跑AI模型;咱们首先第一步先看全志的手册《AW_R329_Tina_Linux_开发入门_v0.5》,在page18 的附录1:在ubuntu14中使用Conda搭建python3.6环境;注意哈,这里是指定了版本以及环境的:
我们跟着一顿操作,然后激活conda虚拟环境,总之跟着文档来就行啦~
然后我们会拿到一个安装包AIPUBuilder-3.0.120-cp36-cp36m-linux_x86_64.whl(没有的找我要~),使用pip安装就好了。
然后就开始安装了哇:pip install AIPUBuilder-3.0.120-cp36-cp36m-linux_x86_64.whl
由于网络不行,这里下载了好久,看到这里就说明,安装成功啦~注意观察log可以看到tensorflow/pytorch的版本,这个你们在转模型的时候需要特别注意的点。
我们看下帮助指令:
原来是安装的版本与要求的版本不一致:
我们先卸载当前版本:
然后随便安装一个满足要求的版本:
又发现AQT里面用了PIL:
于是我们接着装pillow:
接着装networkx:
通过这亿点点操作终于环境ok啦~
如何使用GBuilder
我们去这里随便下载一个kws模型
https://github.com/ARM-software/ML-KWS-for-MCU然后直接把pb文件喂给AIPUBuilder,记得加上kws.cfg文件,这个文件的参数分析留到下一次博客吧,原因是,这节内容太多啦~
最后就会生成如下的三个文件:
然后adb push推送到开发板上,运行效果如下:
正常运行啦~
具体操作细节由于篇幅过大就留到下一章啦~
第四节 我要怎样才能切图(异构计算)呀?
这部分打算配合tengine框架来用,他们的切图贼溜,但是我完全没时间,下次再写。 - ”我要怎么样才能在R329上跑模型的呀?不要多了,能跑你们官方的demo就行,我主要想对整体的开发流程有个主观印象。”
-
回复: fsbuild有问题
@dianjixz 建议你换ubuntu14试试,我们最多只支持到16
https://d1.docs.allwinnertech.com/study/study_3ubuntu/#ubuntu -
回复: 想讨块D1开发板
@nihui 您好,感谢您对我们的支持!D1开发板现在地主家也没有余粮了,下一批五月中旬才能生产出来,届时可以到我的淘宝小店购买。同时我们和合作伙伴也会有一些开发者合作赠送活动,敬请期待。
-
回复: LiveSuit 烧录固件失败
@liangdi 这个不行的,这个是那个是内测开发版本固件,DDR不兼容,你还真能找,那个页面里还有两个说好是哪吒开发板的固件你不下,下了这个。。。我去删掉这个,你换一个下吧,其它两个都可以的
-
回复: 【测试固件更新】D1哪吒内测V0.5版本SDK MIPI屏幕及Tinatest测试固件
之前部分账号下载权限有问题,已经处理,小号在家实测可下(来自五一劳动节晚上10点加班的社畜)
-
【免签NDA直接下】D1 Tina SDK v1.0正式释放!深入了解RISC-V的每一个DNA!
D1 Tina SDK v1.0正式发布!
年装机量超千万的嵌入式系统,基于Linux 5.4内核,专门为智能硬件产品深度定制,全志深耕6年,被国内外多家IoT巨头选用,现在全部释放了!不用签NDA,注册即下,快过玩页游!
源码下载方法见:
https://d1.docs.allwinnertech.com/study/study_2getsdk/下源码请到:
https://open.allwinnertech.com/#/login?cas=true
datasheet & user manual is ready !
更多文档,正在路上!Kirin@RISCV:~/workspace/tina_v1.0$ source build/envsetup.sh Setup env done! Please run lunch next. Kirin@RISCV:~/workspace/tina_v1.0$ lunch You're building on Linux Lunch menu... pick a combo: 1. d1_nezha_min-tina 2. d1_nezha-tina Which would you like?: 2 ============================================ TINA_BUILD_TOP=/home/kirin/workspace/tina_v1.0 TINA_TARGET_ARCH=riscv TARGET_PRODUCT=d1_nezha TARGET_PLATFORM=d1 TARGET_BOARD=d1-nezha TARGET_PLAN=nezha TARGET_BUILD_VARIANT=tina TARGET_BUILD_TYPE=release TARGET_KERNEL_VERSION=5.4 TARGET_UBOOT=u-boot-2018 TARGET_CHIP=sun20iw1p1 ============================================ Kirin@RISCV:~/workspace/tina_v1.0$ make -j64 //编译
(注意lunch的时候选2-d1_nezha-tina是完整系统,1那个带mini的意思是最小系统,很多Tina的功能都没有)
-
【测试固件更新】D1哪吒内测V0.5版本SDK MIPI屏幕及Tinatest测试固件
下载地址:https://developer.allwinnertech.com/downloads/resources/23
固件配置:
基于D1 哪吒内测V0.5版本SDK,相对于标准固件的修改有:
(1)打上MIPI屏幕TFT08006驱动补丁,并选中支持该屏幕;(2)选上Tinatest,测试项包括wifi、pin测试、按键测试、USB host测试、以太网测试、HDMI及3.5mm音频输出测试、麦克风子板测试,部分测试项进行了,如超超时自动判断为fail等;
(3)支持制作为卡量产/启动固件,卡量产烧写完成之后LED亮绿灯;
(4)系统正常启动完成后绿灯正常闪烁;
(5)DTS中的LED数量改为12个,接上麦克风子板后LED灯可全部点亮
发布时间:20210429作者:Kirin
-
【资源汇总】D1-H芯片资料资源汇总
全志在线开发者社区首页:
https://www.aw-ol.com/D1在线文档:
https://d1.docs.allwinnertech.com/D1在线文档英文版(D1 online Documentation Engish version):
https://d1.docs.allwinnertech.com/en/全志在线官方淘宝店链接:
https://shop411926351.taobao.com/?spm=2013.1.0.0.5457546eqpW3go
您可以在这里买到全志的部分芯片(样片)及全志在线的开发板全志客户服务平台:
https://open.allwinnertech.com/
您可以在这里获取到全志芯片的相关SDK和文档,包括datasheet、usermanul,比在线文档更详细的各模块开发文档 -
【国产芯片之光!】全志科技发布首颗RISC-V应用处理器
2021年4月,全志科技宣布推出「D1」处理器,其是全球首颗量产的搭载平头哥玄铁906 RISC-V的应用处理器,为万物互联AIoT时代提供了新的智能关键芯片。
创新
全志科技「D1」芯片与平头哥玄铁906密切合作,结合公司在高清视频处理及系统架构方面的深度积累,集成自研的片内高速互联总线NSI和丰富应用接口,能够提供高性能的异构多核心计算处理和出色的图形加速能力。其强劲的产品表现力从底层性能和规格设计上高度契合AIoT时代海量的场景需求,可广泛应用于智慧城市、智能汽车、智能商显、智能家电、智能办公等多个领域市场。安全
全志科技「D1」开源开放高效的特性为AIoT多种差异化应用的诞生,提供了稳定的技术支撑和可持续性,满足了用户对于技术供应链自主可靠的长期需求,也将在未来各类AIoT碎片化定制产品中大显身手。生态
全球范围内RISC-V阵营正在快速壮大,依托全志科技在技术实现和客户服务上的长期实践经验, 全志科技「D1」丰富的生态体系还可帮助用户快速设计、快速迁移、快速应用,完善的服务将全方位解决用户在实践过程中遇到的各类问题。在提供芯片的同时,全志科技还将为客户同时提供自研的Tina软件系统和开源的Fedora系统。合作共赢 勇为先锋
伴随「D1」应用处理器的发布,全志科技正与诸多创新开发者和核心生态伙伴进行积极合作,充分发挥RISC-V特性和产品系统性能,实现更多AIoT不同应用场景的量产落地。未来,全志科技将持续坚持开放创新,为用户实现价值增长提供更多可靠路径。