c++中的常用命令及docker的使用

常用命令如下:

mount -o remount,rw /ab/app 授权
sftp://[email protected]/   //登录地址

()进程发送信号的使用方法
1) ps -ef|grep mvpProject
2) 用:/home/jiang/abProject/signal的send程序发送命令数据,: ./send pid号 203) sudo ifconfig enx00e04c3669ac 192.168.5.66 //用这个网卡通信
    注:由于HUB不同,所以"enx00e04c3669ac"也不同,根据实际情况设置IP;

()交叉编译的使用方法
第一次拉取进入docker容器
    docker pull 192.168.130.58/autobrain/develop_tda4_rlt2_vh2.3.5:latest  //从新拉取
    docker run -itd 192.168.130.58/autobrain/develop_tda4_rlt2_vh2.3.5:latest /bin/bash //返回一个数字id
    docker exec -it ea1190d87e41c6607cc9c189de26ab3b3c01814097f00373cf8e384ff4d12230 /bin/bash //如果正确的话,则进入docker
第二次直接进入docker容器
1) sudo docker start cdc566485f09 //注意:cdc566485f09是2.3.5版本; 9826d20a3ec7是2.4.1版本;
2) sudo docker exec -it cdc566485f09 /bin/bash
3) 最好再开启一个终端,只完成本地文件与docker容器文件拷贝,如:
    sudo docker cp ab_demo/ cdc566485f09:/workspace/env_sdk_2.3.5/Libs/hat/task/
    sudo docker cp cdc566485f09:/workspace/env_sdk_2.3.5/Libs/hat/task/ab_demo/out/ab_demo.elf ./
4) 进入docker容器后,进入"/workspace/env_sdk_2.3.5/Libs"目录下,输入make ab_demo,进行编译;

1) export PATH=$PATH:/opt/autobrain/sysroot/toolschain/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/   这样设置交叉编译环境 在/workspace/env_sdk_2.0.6/Libs的目录下,输入make ab_demo,可以发现编译器位置 

2)echo $PATH 检测是否有效
输出: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/autobrain/sysroot/toolschain/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc

3) aarch64-none-linux-gnu-gcc -v
   会输出相关的信息,如:Thread model: posix
gcc version 9.2.1 20191025 (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10))等的字样

//protoc的使用注意事项:
不同版本的protoc生成的c文件会不兼容,需要根据实际情况确定;
protoc --cpp_out=./ *.proto //利用protoc命令,生成对应的cpp文件;
protoc --cpp_out=. byd_5r5v/*.proto livan/*.proto *.proto    或者:   protoc --cpp_out=. lynkco06/*.proto *.proto*/   //带依赖关系的,必须这样生成,不能进文件夹内部生成;目录位置:/workspace/tools-server/src/st2pb/modules/common/src/data_struct/proto
//创建软链接时(如aaa,这个文件不能存在),ln -s /home/jiang/123.txt aaa;执行完左边的程序后,执行"ll"命令:终端显示aaa -> /home/jiang/123.txt
//在VH板子上,需要执行  export LD_LIBRARY_PATH=/run/media/mmcblk1p1/lib/:{LD_LIBRARY_PATH}        ,才可以执行lcm相关的程序;

ifconfig eth0 192.168.5.150 用VH板子中间那个口接网线;
//在VH板子上,需要执行 route add default gw 192.168.5.1 添加网关;

vim xxx.file +linenum //在终端可以定位文件行号

sudo kill -9 -5261  杀死一个进程组(包括进程及其子进程),"-5261"必须用负数,代表一组,5261代表一个组ID

//出现下面的错误的原因,是编译链不匹配导致
arch64-none-linux-gnu/bin/ld: /workspace/env_sdk_2.3.5/Libs/hat/task/ab_demo/lib//liblcm.so: undefined reference to `g_thread_join'

如果用 lcm的话,libglib-2.0.so库和libpcre.so库必须添加,如下所示,在docker容器的位置:
LIB-y			 += /opt/autobrain/sysroot/usr/lib/liblcm.a
LIB-y			 += /opt/autobrain/sysroot/usr/lib/libglib-2.0.so
LIB-y			 += /opt/autobrain/sysroot/usr/lib/libpcre.so

subipc 发送的CPU ID 是  9;
subipc 接收的最大CPU ID 号是 23; 目前是从16开始; 理论上可以同时判断14个场景数据; 特别注意:CPU ID必须连续的

Alt + 1;Alt + 2; Alt + n多开终端切换;
dspcmd 18 subipc prtsts //查看发送和接收的subipc数据./

//lcm如果收不到数据,注意下面这两句话是否设置:
sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev enx000eaa0051a4 //注:enx000eaa0051a4是根据实际情况填写
lcm-logplayer-gui -l udpm://239.255.76.67:7667?ttl=1 AEB_001

//数据闭环外网http://192.168.130.179:30688/data/recycle
如果需要ping的话:ping 192.168.130.179

如果想在VH板子上使用远程拷贝,需要把 scp命令复制到 cp scp /bin/ 目录下;
scp ab_demo.elf root@192.168.5.150:/run/media/mmcblk1p1 //密码vh密码: hiklinux

//读一个完整的文件到程序中
int main(void)
{
    
    
	ifstream ifs("cloudparam.txt"); //定义一个文件流对象
	stringstream strbuf; //定义一个字符串流对象
	strbuf<<ifs.rdbuf(); //读文件到字符串流对象中
	string str(strbuf.str()); //用字符串流对象的成员函数构造一个字符串对象;
	cout<<str<<endl; //输出字符串
	ifs.close(); //关闭文件流对象;
	return 0;
}

//getrequest拉取位置:
curl http://192.168.130.179:30315/api/getScene?vehicleId=1593513641609400322

dspcmd 17 algImgTest write 255 写一张文件图片命令
()解压同事白晓明的env_sdk_2.4.1的sdk,把文件拷贝到如下docker(keen_meitner)文件夹下,注意拷贝到docker容器是跟目录,和原生的sdk不是一个目录!!!
	docker cp env_sdk_2.4.1 keen_meitner:/
()进入keen_meitner docker容器:
docker exec -it keen_meitner /bin/bash

()在docker根目录下,find -name ti-cgt-c7000_2.0.1.STS,查找文件,输出结果如下:
	./opt/autobrain/sysroot/toolschain/ti-cgt-c7000_2.0.1.STS
()更改编译选项:
1)在"vi tools/toolchain/toolchain_linux_a72.mk"文件下,更改TC_PATH_CC和TC_PATH_ROOTFS目录,如下所示(注意是toolschain):
	TC_PATH_CC     := /opt/autobrain/sysroot/toolschain/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin
	TC_PATH_ROOTFS := /opt/autobrain/sysroot/toolschain/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc
2)在"vi tools/toolchain/toolchain_freertos_r5f.mk"文件下,更改TC_PATH_CC目录,如下所示(注意是toolschain):
	TC_PATH_CC     := /opt/autobrain/sysroot/toolschain/ti-cgt-armllvm_1.3.0.LTS
3)在"vi tools/toolchain/toolchain_freertos_c71.mk"文件下,更改TC_PATH_CC目录,如下所示(注意是toolschain):
	TC_PATH_CC     := /opt/autobrain/sysroot/toolschain/ti-cgt-c7000_2.0.1.STS

()在docker中,更改Makefile编译环境的方法:
	1)进入/workspace/env_sdk_2.4.1/Libs目录下;
	2)按ab_demo的编译格式更改,共计更改七处,如添加process17目标文件;
	3)在/workspace/env_sdk_2.4.1/Libs目录下,输入make process17即可;
		LIB-y                   += $(ROOTFS_DIR)/usr/lib64/libpthread.so

() 出现类似如“task.cpp:(.text._Z7AppRecvv+0x24c): undefined reference to `Osal_setCpuName'”的错误,是需要拷贝配置环境,方法如下:
用白晓明给的的那个环境拷贝:cp /workspace/env/cfg_env/scfg/buildcfg/process17/ /workspace/env_sdk_2.3.5/Libs/env/cfg_env/scfg/buildcfg -R
涂宁告诉的:cp env/cfg_env/scfg/buildcfg/ab_demo/ /env_sdk_2.4.1/Libs/env/cfg_env/scfg/buildcfg/ -R

()刘占山告诉的,需要添加编译配置文件,方法如下:
	进入目录:“/workspace/env_sdk_2.3.5/Libs/env/cfg_env/scfg/buildcfg”,打开 vim scfg_buildlist.mk文件,添加如下语句:
	SCFG_BUILD_LIST             +=              process17.linux_a72.19^

在把process移植到ab_demo的时候,需要在"../Libs/env/cfg_env/scfg/buildcfg/ab_demo/scfg_module.mk"文件中,按process17的scfg_module.mk文件格式:
添加语句如下:
 SCFG_USE_MODULE_ADVANCE_IPC=y
 SCFG_USE_MODULE_FIFO=y
 SCFG_USE_MODULE_VB=y
 添加完,就可以正常编译;

dspcmd 16 algImgTest imageFileID 739 19700101000208     //739是进程号,后面是时间字符串 注:17是CPUid,根据实际情况填写

利用gdb生成core文件
1) 设置coredump不受限制:ulimit -c unlimited
2) 设置转储文件位置和文件名格式
	sudo bash -c 'echo 0 > /proc/sys/kernel/core_uses_pid'
	sudo bash -c 'echo "/tmp/core_%e_%s_%u_%g_%p_%t" > /proc/sys/kernel/core_pattern'
3) 生成的文件效果如下图所示:
ls /tmp/core_target_11_1000_1000_24646_1690275145 
   /tmp/core_target_11_1000_1000_24646_1690275145
4) 最后利用core文件,调试程序如:  gdb target core_target_11_1000_1000_24646_1690275145

//涂宁
1)用这个目录下的相机文件:“/env_sdk_2.4.3/DRV_TDA4VH_HAD_SD3A_T2_SDK_v2.4.3_230705_477737/Libs”
2)生成的目标文件的目录:"/env_sdk_2.4.3/DRV_TDA4VH_HAD_SD3A_T2_SDK_v2.4.3_230705_477737/Libs/out";
3)docker cp env_sdk_2.4.3 blissful_golick:/
4)vi tools/toolchain/toolchain_freertos_r5f.mk
5)/media/jiang/BOOT/out$ cp * ../ -R
6)sudo umount /media/jiang/BOOT
7)docker cp blissful_golick:/env_sdk_2.4.3/DRV_TDA4VH_HAD_SD3A_T2_SDK_v2.4.3_230705_477737/Libs/out/* .  // 下载docker生成的文件*/
8)dspcmd 17 abImgTest write  255
9)在这个目录"/env_sdk_2.4.3/DRV_TDA4VH_HAD_SD3A_T2_SDK_v2.4.3_230705_477737/Libs/tools/toolchain",更改
  toolchain_freertos_c71.mk  toolchain_freertos_r5f.mk  toolchain_linux_a72.mk等文件里面的编译目录:如下:
   TC_PATH_CC              := /opt/autobrain/sysroot/toolschain/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin
   TC_PATH_ROOTFS          := /opt/autobrain/sysroot/toolschain/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc

10) sudo docker cp hat/demo/test_abImg.c b28ff1a514f3:/env_sdk_2.4.3/DRV_TDA4VH_HAD_SD3A_T2_SDK_v2.4.3_230705_477737/Libs/hat/demo 上传容器
11) docker cp b28ff1a514f3:/env_sdk_2.4.3/DRV_TDA4VH_HAD_SD3A_T2_SDK_v2.4.3_230705_477737/Libs/hat/task/process17/out/process17.elf ./ //下载elf

//生成文件命令
dspcmd 17 abImgTest write  255

猜你喜欢

转载自blog.csdn.net/qq_30143193/article/details/132190331