交叉编译应用程序无法运行

  • little_white wrote: 2024-04-25 11:21 板子上max,虚拟机是环境22.04,按文档直接git下来源码buildroot,任何东西没动
    执行第三步:安装交叉编译工具链,全部编译镜像,我看到也是编译通过了的

    然后要将交叉编译工具的路径添加到系统的 PATH 环境变量中
    然后,命令行打下arm-r之后按table会自动补全,然后我就加个gcc,一个c语言文件,在ubantu是可以编译运行的,然后交叉编译通过,大小18k,发送到windows上也是18k,再发送到开发板就变20多k,然后运行就马上报错,错误如下:line 1: syntax error: unexpected ")"

    我查网上说是makefile,我也不知道交叉编译makefile怎么搞,我用ubantu命令file文件,如下:x: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, not stripped
    您好,正常出现这种情况都是交叉编译时出现的问题,我需要确定一下您使用的buildroot编译生成的arm-rockchip830-linux-uclibcgnueabihf-gcc还是 <Luckfox-pico SDK>/tools/linux/toolchain 下的交叉编译链,我们目前使用的都是 SDK 提供的交叉编译链。
  • Crocodile wrote: 2024-04-25 12:10
    little_white wrote: 2024-04-25 11:21 板子上max,虚拟机是环境22.04,按文档直接git下来源码buildroot,任何东西没动
    执行第三步:安装交叉编译工具链,全部编译镜像,我看到也是编译通过了的

    然后要将交叉编译工具的路径添加到系统的 PATH 环境变量中
    然后,命令行打下arm-r之后按table会自动补全,然后我就加个gcc,一个c语言文件,在ubantu是可以编译运行的,然后交叉编译通过,大小18k,发送到windows上也是18k,再发送到开发板就变20多k,然后运行就马上报错,错误如下:line 1: syntax error: unexpected ")"

    我查网上说是makefile,我也不知道交叉编译makefile怎么搞,我用ubantu命令file文件,如下:x: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, not stripped
    您好,正常出现这种情况都是交叉编译时出现的问题,我需要确定一下您使用的buildroot编译生成的arm-rockchip830-linux-uclibcgnueabihf-gcc还是 <Luckfox-pico SDK>/tools/linux/toolchain 下的交叉编译链,我们目前使用的都是 SDK 提供的交叉编译链。
    用的是文档教程里面的那种方法,配置交叉编译环境后使用arm-rockchip830-linux-uclibcgnueabihf-gcc,我再命令行输入arm-r直接按table就自动补全大部分
  • little_white wrote: 2024-04-26 3:05
    Crocodile wrote: 2024-04-25 12:10
    little_white wrote: 2024-04-25 11:21 板子上max,虚拟机是环境22.04,按文档直接git下来源码buildroot,任何东西没动
    执行第三步:安装交叉编译工具链,全部编译镜像,我看到也是编译通过了的

    然后要将交叉编译工具的路径添加到系统的 PATH 环境变量中
    然后,命令行打下arm-r之后按table会自动补全,然后我就加个gcc,一个c语言文件,在ubantu是可以编译运行的,然后交叉编译通过,大小18k,发送到windows上也是18k,再发送到开发板就变20多k,然后运行就马上报错,错误如下:line 1: syntax error: unexpected ")"

    我查网上说是makefile,我也不知道交叉编译makefile怎么搞,我用ubantu命令file文件,如下:x: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, not stripped
    您好,正常出现这种情况都是交叉编译时出现的问题,我需要确定一下您使用的buildroot编译生成的arm-rockchip830-linux-uclibcgnueabihf-gcc还是 <Luckfox-pico SDK>/tools/linux/toolchain 下的交叉编译链,我们目前使用的都是 SDK 提供的交叉编译链。
    用的是文档教程里面的那种方法,配置交叉编译环境后使用arm-rockchip830-linux-uclibcgnueabihf-gcc,我再命令行输入arm-r直接按table就自动补全大部分
    我注意到您还存在上传文件大小变化的问题,可以尝试使用md5sum 验证文件是否完整,对比在PC上的md5值和板端的md5值是否相同。
    还有方便透露一下您交叉编译的程序主要是什么功能和您使用什么工具上传文件的吗?这里是一个打印helloworld的可执行程序,我经过测试是没有问题的,您可以用来测试一下程序是否在上传中出现什么问题。
    helloworld.7z (1.74 KiB)
    Downloaded 443 times
  • Crocodile wrote: 2024-04-26 6:00
    little_white wrote: 2024-04-26 3:05
    Crocodile wrote: 2024-04-25 12:10

    您好,正常出现这种情况都是交叉编译时出现的问题,我需要确定一下您使用的buildroot编译生成的arm-rockchip830-linux-uclibcgnueabihf-gcc还是 <Luckfox-pico SDK>/tools/linux/toolchain 下的交叉编译链,我们目前使用的都是 SDK 提供的交叉编译链。
    用的是文档教程里面的那种方法,配置交叉编译环境后使用arm-rockchip830-linux-uclibcgnueabihf-gcc,我再命令行输入arm-r直接按table就自动补全大部分
    我注意到您还存在上传文件大小变化的问题,可以尝试使用md5sum 验证文件是否完整,对比在PC上的md5值和板端的md5值是否相同。
    还有方便透露一下您交叉编译的程序主要是什么功能和您使用什么工具上传文件的吗?这里是一个打印helloworld的可执行程序,我经过测试是没有问题的,您可以用来测试一下程序是否在上传中出现什么问题。
    helloworld.7z
    上传也是用的文档教程里面上传的,scp helloworld root@172.32.0.93:/root,上传之后给777执行权限,执行没问题,说明发送是没问题。我的程序是先从虚拟机拉到windows上,这个时候我看程序文件也会变大(win11),然后再发送给开发板。我的程序是串口+xmodem协议,然后程序需要先读出外部文件(已放到开发板上)处理的数据有差不多500k的buf
  • Crocodile wrote: 2024-04-26 6:00
    little_white wrote: 2024-04-26 3:05
    Crocodile wrote: 2024-04-25 12:10

    您好,正常出现这种情况都是交叉编译时出现的问题,我需要确定一下您使用的buildroot编译生成的arm-rockchip830-linux-uclibcgnueabihf-gcc还是 <Luckfox-pico SDK>/tools/linux/toolchain 下的交叉编译链,我们目前使用的都是 SDK 提供的交叉编译链。
    用的是文档教程里面的那种方法,配置交叉编译环境后使用arm-rockchip830-linux-uclibcgnueabihf-gcc,我再命令行输入arm-r直接按table就自动补全大部分
    我注意到您还存在上传文件大小变化的问题,可以尝试使用md5sum 验证文件是否完整,对比在PC上的md5值和板端的md5值是否相同。
    还有方便透露一下您交叉编译的程序主要是什么功能和您使用什么工具上传文件的吗?这里是一个打印helloworld的可执行程序,我经过测试是没有问题的,您可以用来测试一下程序是否在上传中出现什么问题。
    helloworld.7z
    现在用文档代码c语言测试串口4,执行
    # chmod 777 test
    # ./test
    Select a serial port (3/4): 4

    这样就不动了,我用shell也是,直接echo Hello > /dev/ttyS3然后也是不动了,按回车也没出#,串口3也是,只能直接杀死进程,是不是驱动不支持115200啊
    stty命令,多了一串很长的
    # stty -F /dev/ttyS4
    speed 115200 baud; line = 0;
    intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>;
    eol = <undef>; eol2 = <undef>; swtch = <undef>; start = <undef>; stop = <undef>;
    susp = <undef>; rprnt = <undef>; werase = <undef>; lnext = <undef>; flush = <undef>;
    min = 0; time = 0;
    -brkint -icrnl -imaxbel
    -opost -onlcr
    -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
    # stty -F /dev/ttyS3
    speed 115200 baud; line = 0;
    intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>;
    eol = <undef>; eol2 = <undef>; swtch = <undef>; start = <undef>; stop = <undef>;
    susp = <undef>; rprnt = <undef>; werase = <undef>; lnext = <undef>; flush = <undef>;
    min = 0; time = 0;
    -brkint -icrnl -imaxbel
    -opost -onlcr
    -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
    Last edited by little_white on 2024-04-26 7:25, edited 1 time in total.
  • little_white wrote: 2024-04-26 6:18
    Crocodile wrote: 2024-04-26 6:00
    little_white wrote: 2024-04-26 3:05

    用的是文档教程里面的那种方法,配置交叉编译环境后使用arm-rockchip830-linux-uclibcgnueabihf-gcc,我再命令行输入arm-r直接按table就自动补全大部分
    我注意到您还存在上传文件大小变化的问题,可以尝试使用md5sum 验证文件是否完整,对比在PC上的md5值和板端的md5值是否相同。
    还有方便透露一下您交叉编译的程序主要是什么功能和您使用什么工具上传文件的吗?这里是一个打印helloworld的可执行程序,我经过测试是没有问题的,您可以用来测试一下程序是否在上传中出现什么问题。
    helloworld.7z
    上传也是用的文档教程里面上传的,scp helloworld root@172.32.0.93:/root,上传之后给777执行权限,执行没问题,说明发送是没问题。我的程序是先从虚拟机拉到windows上,这个时候我看程序文件也会变大(win11),然后再发送给开发板。我的程序是串口+xmodem协议,然后程序需要先读出外部文件(已放到开发板上)处理的数据有差不多500k的buf
    请问有确认md5值吗? 板端默认是由md5sun命令的,分别测一下在不同的系统中的md5值,如果非商用用途只是学习使用的话可以提供一下您的源码吗?同时您的程序时串口+xmodem协议,是指用xmodem协议把代码上传到板端吗?
  • little_white wrote: 2024-04-26 7:15
    Crocodile wrote: 2024-04-26 6:00
    little_white wrote: 2024-04-26 3:05

    用的是文档教程里面的那种方法,配置交叉编译环境后使用arm-rockchip830-linux-uclibcgnueabihf-gcc,我再命令行输入arm-r直接按table就自动补全大部分
    我注意到您还存在上传文件大小变化的问题,可以尝试使用md5sum 验证文件是否完整,对比在PC上的md5值和板端的md5值是否相同。
    还有方便透露一下您交叉编译的程序主要是什么功能和您使用什么工具上传文件的吗?这里是一个打印helloworld的可执行程序,我经过测试是没有问题的,您可以用来测试一下程序是否在上传中出现什么问题。
    helloworld.7z
    现在用文档代码c语言测试串口4,执行
    # chmod 777 test
    # ./test
    Select a serial port (3/4): 4

    这样就不动了,我用shell也是,直接echo Hello > /dev/ttyS3然后也是不动了,按回车也没出#,串口3也是,只能直接杀死进程,是不是驱动不支持115200啊
    stty命令,多了一串很长的
    # stty -F /dev/ttyS4
    speed 115200 baud; line = 0;
    intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>;
    eol = <undef>; eol2 = <undef>; swtch = <undef>; start = <undef>; stop = <undef>;
    susp = <undef>; rprnt = <undef>; werase = <undef>; lnext = <undef>; flush = <undef>;
    min = 0; time = 0;
    -brkint -icrnl -imaxbel
    -opost -onlcr
    -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
    # stty -F /dev/ttyS3
    speed 115200 baud; line = 0;
    intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>;
    eol = <undef>; eol2 = <undef>; swtch = <undef>; start = <undef>; stop = <undef>;
    susp = <undef>; rprnt = <undef>; werase = <undef>; lnext = <undef>; flush = <undef>;
    min = 0; time = 0;
    -brkint -icrnl -imaxbel
    -opost -onlcr
    -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
    我这边测试的结果

    Code: Select all

    # stty -F /dev/ttyS4
    speed 115200 baud; line = 0;
    intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
    eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
    werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
    -brkint -imaxbel
    
    您的打印结果中多了很多标志位不太清楚是什么原因引起的,您是在重启系统修改波特率就使用stty打印还是在执行完程序后才打印的?
  • Crocodile wrote: 2024-04-26 7:57
    little_white wrote: 2024-04-26 7:15
    Crocodile wrote: 2024-04-26 6:00

    我注意到您还存在上传文件大小变化的问题,可以尝试使用md5sum 验证文件是否完整,对比在PC上的md5值和板端的md5值是否相同。
    还有方便透露一下您交叉编译的程序主要是什么功能和您使用什么工具上传文件的吗?这里是一个打印helloworld的可执行程序,我经过测试是没有问题的,您可以用来测试一下程序是否在上传中出现什么问题。
    helloworld.7z
    现在用文档代码c语言测试串口4,执行
    # chmod 777 test
    # ./test
    Select a serial port (3/4): 4

    这样就不动了,我用shell也是,直接echo Hello > /dev/ttyS3然后也是不动了,按回车也没出#,串口3也是,只能直接杀死进程,是不是驱动不支持115200啊
    stty命令,多了一串很长的
    # stty -F /dev/ttyS4
    speed 115200 baud; line = 0;
    intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>;
    eol = <undef>; eol2 = <undef>; swtch = <undef>; start = <undef>; stop = <undef>;
    susp = <undef>; rprnt = <undef>; werase = <undef>; lnext = <undef>; flush = <undef>;
    min = 0; time = 0;
    -brkint -icrnl -imaxbel
    -opost -onlcr
    -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
    # stty -F /dev/ttyS3
    speed 115200 baud; line = 0;
    intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>;
    eol = <undef>; eol2 = <undef>; swtch = <undef>; start = <undef>; stop = <undef>;
    susp = <undef>; rprnt = <undef>; werase = <undef>; lnext = <undef>; flush = <undef>;
    min = 0; time = 0;
    -brkint -icrnl -imaxbel
    -opost -onlcr
    -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
    我这边测试的结果

    Code: Select all

    # stty -F /dev/ttyS4
    speed 115200 baud; line = 0;
    intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
    eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
    werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
    -brkint -imaxbel
    
    您的打印结果中多了很多标志位不太清楚是什么原因引起的,您是在重启系统修改波特率就使用stty打印还是在执行完程序后才打印的?
    执行程序之后打印的,程序在虚拟机上的ubantu正常运行
  • little_white wrote: 2024-04-26 8:50
    Crocodile wrote: 2024-04-26 7:57
    little_white wrote: 2024-04-26 7:15

    现在用文档代码c语言测试串口4,执行
    # chmod 777 test
    # ./test
    Select a serial port (3/4): 4

    这样就不动了,我用shell也是,直接echo Hello > /dev/ttyS3然后也是不动了,按回车也没出#,串口3也是,只能直接杀死进程,是不是驱动不支持115200啊
    stty命令,多了一串很长的
    # stty -F /dev/ttyS4
    speed 115200 baud; line = 0;
    intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>;
    eol = <undef>; eol2 = <undef>; swtch = <undef>; start = <undef>; stop = <undef>;
    susp = <undef>; rprnt = <undef>; werase = <undef>; lnext = <undef>; flush = <undef>;
    min = 0; time = 0;
    -brkint -icrnl -imaxbel
    -opost -onlcr
    -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
    # stty -F /dev/ttyS3
    speed 115200 baud; line = 0;
    intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>;
    eol = <undef>; eol2 = <undef>; swtch = <undef>; start = <undef>; stop = <undef>;
    susp = <undef>; rprnt = <undef>; werase = <undef>; lnext = <undef>; flush = <undef>;
    min = 0; time = 0;
    -brkint -icrnl -imaxbel
    -opost -onlcr
    -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
    我这边测试的结果

    Code: Select all

    # stty -F /dev/ttyS4
    speed 115200 baud; line = 0;
    intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
    eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
    werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
    -brkint -imaxbel
    
    您的打印结果中多了很多标志位不太清楚是什么原因引起的,您是在重启系统修改波特率就使用stty打印还是在执行完程序后才打印的?
    执行程序之后打印的,程序在虚拟机上的ubantu正常运行

    由于不清楚您的应用执行了什么,我觉得有可能是您的程序对对应的TTY作了设置。
    正常情况下程序如果用交叉编译链编译的可执行程序在ubuntu上是不能运行的。同时根据您的上下文调用了相关的硬件(串口tty),如果是用ubuntu上的gcc编译后的可执行程序应该找不到相应的/dev/ttySx设备。你可以排除一下是否和这方面有关。
    目前主要的问题还是在line 1: syntax error: unexpected ")" 的运行报错,我觉得可能还是和编译过程和上传过程相关,程序的内容应该不是关键,还是请求您执行md5sum file 命令查看几个系统上可执行文件的 md5 值以方便问题的进一步推断。