您尚未登录。

楼主 # 2024-05-10 08:38:01

lqcfly
会员
注册时间: 2024-05-10
已发帖子: 4
积分: 45

D133 Eclipse工程在Linux系统下编译的解决办法

官方SDK生成的D133的Eclipse工程只能在Windows环境下编译。使用Linux系统的小伙伴如果想编译调试,可以使用下边的方案解决。
本人使用Deepin做开发,亲测好使。具体步骤如下:

1、linux系统中先安装python3软件,编译时要用

2、先用scons --target=eclipse_sdk指令单独生成一个完整的 Eclipse SDK 软件包,即project_eclipse_sdk文件夹
   注意:在执行eclipse_linux_check.sh脚本之前,不要挪动project_eclipse_sdk文件夹。

3、将eclipse_linux_check.sh脚本文件复制到project_eclipse_sdk文件夹中

4、执行eclipse_linux_check.sh脚本文件,该文件会对“.cproject”文件和“org.eclipse.cdt.core.prefs”进行修改

5、执行完脚本,即可在linux环境中编译eclipse工程了

eclipse_linux_check.sh 脚本内容如下,可以根据自己系统的环境做修改。

#!/bin/bash


#复制固件生成工具
cp -r $PWD/../../../tools/scripts/img2simg    $PWD/tools/scripts
cp -r $PWD/../../../tools/scripts/mcopy       $PWD/tools/scripts
cp -r $PWD/../../../tools/scripts/mformat     $PWD/tools/scripts
cp -r $PWD/../../../tools/scripts/mkenvimage  $PWD/tools/scripts
cp -r $PWD/../../../tools/scripts/mkimage     $PWD/tools/scripts
cp -r $PWD/../../../tools/scripts/mkuffs      $PWD/tools/scripts
cp -r $PWD/../../../tools/scripts/mtools      $PWD/tools/scripts
cp -r $PWD/../../../tools/scripts/spienc      $PWD/tools/scripts
cp -r $PWD/../../../tools/scripts/upgcmd      $PWD/tools/scripts
cp -r $PWD/../../../tools/scripts/mklittlefs  $PWD/tools/scripts


#修改工程PATH路径
PREFS="doxygen/doxygen_new_line_after_brief=true\n
doxygen/doxygen_use_brief_tag=false\n
doxygen/doxygen_use_javadoc_tags=true\n
doxygen/doxygen_use_pre_tag=false\n
doxygen/doxygen_use_structural_commands=false\n
eclipse.preferences.version=1\n
environment/project/ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.319524623/PATH/delimiter=;\n
environment/project/ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.319524623/PATH/operation=replace\n
environment/project/ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.319524623/PATH/value=\${ProjDirPath}/toolchain/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin\n
environment/project/ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.319524623/append=true\n
environment/project/ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.319524623/appendContributed=true\n"

echo -e $PREFS > .settings/org.eclipse.cdt.core.prefs



#修改工程配置文件
sed -i 's/\\/\//g' ./.cproject       #将文件中的"\"全部替换为"/"
sed -i 's/\${ProjDirPath}\/tools\/Python39\/python3/\/usr\/bin\/python3/g' .cproject       #将"${ProjDirPath}/tools/Python39/python3"全部替换为"/usr/bin/python3"
sed -i 's/\${ProjDirPath}\/tools\/bin\/cp/\/usr\/bin\/cp/g' .cproject       #將"${ProjDirPath}/tools/bin/cp"全部替換为"cp"
sed -i 's/*.pbp/d13x.pbp/g' .cproject       #將"${ProjDirPath}/bsp/artinchip/sys/d13x/*.pbp"  全部替換为  "${ProjDirPath}/bsp/artinchip/sys/d13x/d13x.pbp"
sed -i 's/pack\/\*/pack\/bootloader.bin \${ProjDirPath}\/Debug\/;\/usr\/bin\/cp -r \${ProjDirPath}\/target\/d13x\/gateway88-nor\/pack\/image_cfg.json \${ProjDirPath}\/Debug\/;\/usr\/bin\/cp -r \${ProjDirPath}\/target\/d13x\/gateway88-nor\/pack\/pbp_cfg.json/g' .cproject       #將"${ProjDirPath}/target/d13x/gateway88-nor/pack/*"  全部替換为  "${ProjDirPath}/target/d13x/gateway88-nor/pack/"

有问题欢迎大家交流学习!

离线

#1 2024-05-14 09:35:00

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,280
积分: 1229.5

Re: D133 Eclipse工程在Linux系统下编译的解决办法

没这么试过,在linux可以脱离eclipse环境了吧。
应该可以直接用scons命令,或者执行sdk/tools/onestep.sh这个脚本,然后执行预定义的几个命令。
我在ubuntu下,me, ab, list, i, lunch这些都正常。
但是烧录问题还没解决吧,编译完了,再切到win下烧录?
希望官方出个linux下的烧录工具,或命令行工具。

离线

#2 2024-05-17 07:10:17

tomas
会员
注册时间: 2024-03-26
已发帖子: 24
积分: 107

Re: D133 Eclipse工程在Linux系统下编译的解决办法

eclipse很慢的吧,慢的受不了

离线

#3 2024-05-17 08:28:31

ArtInChip
会员
注册时间: 2023-11-11
已发帖子: 184
积分: 190

Re: D133 Eclipse工程在Linux系统下编译的解决办法

这个需求已记录

离线

#4 2024-05-17 09:48:26

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 557
积分: 681
个人网站

Re: D133 Eclipse工程在Linux系统下编译的解决办法

tomas 说:

eclipse很慢的吧,慢的受不了

自己电脑配置差或者不会用就不要乱BB。
举个简单的例子,同样的构建脚本,在eclipse内构建会比在终端上构建要快,因为eclipse对编译器的输出信息有优化。
在并行编译时,编译器输出信息到标准输出过快也是瓶颈之一。
当然了,如果你的电脑配置差,编译速率本身就慢,于是编译器输出信息没就那么快也就达不到标准输出的瓶颈,从而体现不到别人的优化。

最近编辑记录 海石生风 (2024-05-17 09:55:45)

离线

楼主 #5 2024-05-17 13:02:25

lqcfly
会员
注册时间: 2024-05-10
已发帖子: 4
积分: 45

Re: D133 Eclipse工程在Linux系统下编译的解决办法

用惯了Eclipse,除了启动慢了点,其他还是挺方便的,工程维护和代码调试都挺好用的,还能保证原始SDK的纯净。其实VSCODE也可以开发,就是本人不太习惯直接在SDK里修改程序,用Keil久了习惯了单独一个工程的方式。

希望官方尽快出个Linux系统下的烧录工具,这样就可以彻底摆脱Windows虚拟机了。

最近编辑记录 lqcfly (2024-05-17 13:03:28)

离线

#6 2024-05-30 10:22:10

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,280
积分: 1229.5

Re: D133 Eclipse工程在Linux系统下编译的解决办法

发现onestep.sh里有aicupg这个命令,在win下试了,可以烧录。切到ubuntu下,执行onestep.sh后,执行aicupg,总是找不到设备。
经群里朋友提示,加sudo,但提示找不到aicupg命令,然后直接执行sudo scons aicupg -C .命令,可以烧录了。

那么,为何aicup命令无法找到设备呢?

离线

#7 2024-05-30 15:40:32

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 557
积分: 681
个人网站

Re: D133 Eclipse工程在Linux系统下编译的解决办法

Linux里的文件权限管理比Windows严格,无论是tty还是USB设置都需要用户对其有访问权限,可以用udev rules修改设备文件的权限模式来获取访问权限。

离线

#8 2024-05-30 17:22:23

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,280
积分: 1229.5

Re: D133 Eclipse工程在Linux系统下编译的解决办法

海石生风 说:

Linux里的文件权限管理比Windows严格,无论是tty还是USB设置都需要用户对其有访问权限,可以用udev rules修改设备文件的权限模式来获取访问权限。

让进入烧录模式,用lsusb,可以看到有usb设备:

Bus 001 Device 006: ID 33c3:6677 Artinchip Artinchip Device

但是进入/dev目录,却没有增加相应的tty设备,所以不知道该对哪个设备修改用户权限了。

离线

#9 2024-05-31 11:30:10

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 557
积分: 681
个人网站

Re: D133 Eclipse工程在Linux系统下编译的解决办法

通用USB设备默认似乎不会在/dev目录添加节点,可以通过udev来添加其节点,并随便修改权限模式为666:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="33c3", ATTRS{idProduct}=="6677", MODE:="0666", SYMLINK+="aic0"

离线

#10 2024-05-31 13:57:43

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,280
积分: 1229.5

Re: D133 Eclipse工程在Linux系统下编译的解决办法

海石生风 说:

通用USB设备默认似乎不会在/dev目录添加节点,可以通过udev来添加其节点,并随便修改权限模式为666:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="33c3", ATTRS{idProduct}=="6677", MODE:="0666", SYMLINK+="aic0"

额,如何通过udev添加设备节点呢?
另,是不是每次通过usb连接d133板,都需要手动添加下节点?如果是这样的话,就不如sudo + scons aicupg命令了。

离线

#11 2024-05-31 16:30:47

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 557
积分: 681
个人网站

Re: D133 Eclipse工程在Linux系统下编译的解决办法

上面那个udev rules就是通过udev添加设备节点呀: SYMLINK+="aic0"
USB设备接入后就会自动在/dev目录下生成aci0节点。其实不一定要加这个节点,只要权限许可就可以访问了。

另外,建议多了解udev。

最近编辑记录 海石生风 (2024-05-31 16:35:30)

离线

#12 2024-06-01 09:07:38

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,280
积分: 1229.5

Re: D133 Eclipse工程在Linux系统下编译的解决办法

海石生风 说:

上面那个udev rules就是通过udev添加设备节点呀: SYMLINK+="aic0"
USB设备接入后就会自动在/dev目录下生成aci0节点。其实不一定要加这个节点,只要权限许可就可以访问了。

另外,建议多了解udev。

我pc是ubuntu,在/etc/udev/rules.d目录下,新建个rules,比如我命名80-aicusb.rules,然后添加上边的内容。这样,板子如果进入烧录模式,在/dev/目录下,可以找到aic0这个设备。可以通过aicupg命令直接烧写程序了。

感谢。

离线

楼主 #13 2024-06-03 15:51:09

lqcfly
会员
注册时间: 2024-05-10
已发帖子: 4
积分: 45

Re: D133 Eclipse工程在Linux系统下编译的解决办法

感谢  海石生风 、Gentlepig 两位提供的信息,我总结了一个在Linux系统下,使用Eclipse一键自动下载的方法,
供大家参考,Deepin系统亲测有效,具体步骤如下:

1、将80-aicusb.rules文件复制到linux系统/etc/udev/rules.d文件夹中。当D133开发板处于下载模式时,
   插入USB口,此时在系统/dev中可以发现aic0节点。此节点用于下载新固件。

2、确保D133 Eclipse工程可以在Linux系统中正常编译。

3、将auto_download_image.sh脚本复制到D133 Eclipse工程 ./tools/scripts文件夹下。
   注:确保./tools/scripts文件夹中有upgcmd可执行程序,没有的话去官方SDK中拷贝。

4、打开D133 Eclipse工程,点击左侧工程目录,按F5刷新工程目录,确保./tools/scripts路径中
   可以看到auto_download_image.sh脚本。

5、Eclipse界面下,点击Run-> External Tools-> External Tools Configurations...,新建配置项Download
  (注:名称可自定义)

6、在配置项Download页面参数设置如下(根据实际工程配置),配置好后保存即可
   Main选项卡-> Location: ${workspace_loc:/d13x/tools/scripts/auto_download_image.sh}

   Main选项卡-> WorkingDirectory: ${workspace_loc:/d13x/tools/scripts}

   Build选项卡->Build Before launch选项去掉(避免下载前重复编译,节约时间)

7、确保PC端与D133通信的串口是打开的。比如我使用的串口工具为CH340,在电脑上识别驱动是/dev/ttyUSB0,
    我使用的Eclipse自带的Terminal终端工具打开/dev/ttyUSB0,打开串口通信,点击回车出现 " aic /> " 即可。
    做到这一步,就可以通过脚本使D133自动进入升级模式。
    注:如果D133因为某些原因不能进行串口调试,可以通过手动进入D133调试模式来跳过此步。
     
   
8、点击External Tools中的自定义Download选项,即可实现自动下载程序的操作。


80-aicusb.rules文件内容

SUBSYSTEMS=="usb", ATTRS{idVendor}=="33c3", ATTRS{idProduct}=="6677", MODE:="0666", SYMLINK+="aic0"

auto_download_image.sh文件内容

#!/bin/bash


#向D133串口发送升级指令aicupg,串口可根据实际修改
echo "aicupg" > /dev/ttyUSB0
sleep 2

#确保设备进入升级模式
#如果设备无法通过串口进入升级模式,就下拉串口TX线使其进入升级模式
#upgcmd是官方提供的下载工具,在SDK ./luban-lite/tools/scripts路径下
#"../../Debug/d13x_gateway-nor_v1.0.0.img"为要下载的固件路径
./upgcmd image ../../Debug/d13x_gateway-nor_v1.0.0.img

#下载完成,重启设备
./upgcmd shcmd reset

#有时一次不成功,需要再次启动才能正常下载成功
./upgcmd image ../../Debug/d13x_gateway-nor_v1.0.0.img

#下载完成,重启设备
./upgcmd shcmd reset

Eclipse下载时 Console打印日志

The Image file: ../../Debug/d13x_gateway-nor_v1.0.0.img, size 751616

Upgrade fwc: image.updater.spl, size 196368 ...
Send the rest 196368
[ERROR ]: aicupg_trans_recv_pkt()208:             CSW size 0, No such device (it may have been disconnected)(-4)
[ERROR ]: aicupg_cmd_send_fwc_data_final()777:    Recv resp failed, expect 16, got 0
[INFO  ]: __do_fwc_upgrade()294:                  Switching to new stage, please ignore the error message.
[INFO  ]: image_do_upgrade_inner()460:            Try to recovery the connection ...
[ERROR ]: aicupg_trans_send_pkt()80:              CBW tag 0x6b, size 0, No such device (it may have been disconnected)(-4)
[ERROR ]: aicupg_cmd_get_hwinfo()106:             Send command failed. ret = 0, siz = 16
[INFO  ]: image_do_upgrade_inner()463:            Connection recovery failed ...
[ERROR ]: aicupg_trans_send_pkt()80:              CBW tag 0x6c, size 0, No such device (it may have been disconnected)(-4)
[ERROR ]: aicupg_cmd_set_upg_end()535:            Send command failed. ret = 0, siz = 16
[ERROR ]: image_do_upgrade_inner()492:            Burn ../../Debug/d13x_gateway-nor_v1.0.0.img failed!, ret -4
[ERROR ]: upgcmd()1297:                           Open upg device failed.


The Image file: ../../Debug/d13x_gateway-nor_v1.0.0.img, size 751616

Upgrade fwc: image.updater.spl, size 196368 ...
Send the rest 196368

Upgrade fwc: image.info, size 2048 ...
Send the rest 2048

Upgrade fwc: image.target.spl, size 196368 ...
Send the rest 196608

Upgrade fwc: image.target.os, size 354304 ...
Send the rest 354304

Burn ../../Debug/d13x_gateway-nor_v1.0.0.img successfully!
Used time: 6.6 sec, Speed: 0.11 MB/s
[ERROR ]: aicupg_trans_send_pkt()104:             CSW tag 0x2, size 0, No such device (it may have been disconnected)(-4)

最近编辑记录 lqcfly (2024-06-03 16:01:56)

离线

楼主 #14 2024-06-04 09:02:49

lqcfly
会员
注册时间: 2024-05-10
已发帖子: 4
积分: 45

Re: D133 Eclipse工程在Linux系统下编译的解决办法

关于在Linux系统下使用调试器调试的问题,可以通过安装Linux版T-Head-DebugServer来解决
本人Deepin系统,使用Cklink ite版调试器,亲测有效,与Windows版使用效果一样,但是只支持命令行。

1、T-Head-DebugServer-linux-x86_64-V5.18.0-20230926.sh.tar.gz为T-Head-DebugServer安装文件
T-Head-DebugServer-linux-x86_64-V5.18.0-20230926.sh.tar.gz

2、使用说明见T-Head+Debugger+Server+User+Guide.pdf第3章内容。
T-Head+Debugger+Server+User+Guide.pdf

最近编辑记录 lqcfly (2024-06-04 09:04:06)

离线

#15 2024-06-05 11:37:42

ArtInChip
会员
注册时间: 2023-11-11
已发帖子: 184
积分: 190

Re: D133 Eclipse工程在Linux系统下编译的解决办法

还是推荐VScode好用

离线

#16 2024-06-09 08:22:55

xfdr0805
会员
注册时间: 2020-07-23
已发帖子: 296
积分: 349

Re: D133 Eclipse工程在Linux系统下编译的解决办法

ArtInChip 说:

还是推荐VScode好用

我用的芯片是D12x,updcmd可以烧录吗?还是说这个是用于带USB芯片的烧录?
AIBURN我看是QT写的,能否编译个Linux下的烧录软件,要是能终端烧录就更好了。
ksnip_20240609-081744.png

最近编辑记录 xfdr0805 (2024-06-09 08:36:03)

离线

#17 2024-06-09 11:09:44

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 557
积分: 681
个人网站

Re: D133 Eclipse工程在Linux系统下编译的解决办法

因为upgcmd模式下的USB不是tty这种标准设备,而是自定义的USB设备。

upgcmd会根据VID和PID自动查找USB设备而无需-d选项,只有在接入了多个同类设备时才需要使用-d选项来区分。

离线

#18 2024-06-09 14:38:33

xfdr0805
会员
注册时间: 2020-07-23
已发帖子: 296
积分: 349

Re: D133 Eclipse工程在Linux系统下编译的解决办法

海石生风 说:

因为upgcmd模式下的USB不是tty这种标准设备,而是自定义的USB设备。

upgcmd会根据VID和PID自动查找USB设备而无需-d选项,只有在接入了多个同类设备时才需要使用-d选项来区分。

谢谢!明白了。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn