OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5129|回复: 9

交叉编译的应用程序在板子上无法运行

[复制链接]

4

主题

16

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2019-10-29
在线时间
5 小时
发表于 2019-11-21 17:20:16 | 显示全部楼层 |阅读模式
1金钱
我编译了个测试文件,手动拷贝到SD卡的文件系统的lib目录下,系统启动之后我在终端执行这个bin文件,可是没有任何打印(只要执行就是有打印的)
感觉就像没有执行一样
0.png
文件格式如下
1.png
代码如下
  1. #include<stdio.h>
  2. #include<linux/types.h>
  3. #include<fcntl.h>
  4. #include<unistd.h>
  5. #include<stdlib.h>
  6. #include<sys/types.h>
  7. #include<sys/ioctl.h>
  8. #include<string.h>
  9. #include<linux/i2c.h>
  10. #include<linux/i2c-dev.h>

  11. #define MAX_BYTES            2
  12. #define DEFAULT_I2C_BUS      "/dev/i2c-0"

  13. int
  14. i2c_write(int fd,
  15.                  unsigned int addr,
  16.                  unsigned int offset,
  17.                  unsigned char *buf,
  18.                  unsigned int len)
  19. {
  20.         struct i2c_rdwr_ioctl_data msg_rdwr;
  21.         struct i2c_msg i2cmsg;
  22.         int i;
  23.         char _buf[MAX_BYTES+1];

  24.         if(len>MAX_BYTES)
  25.         {
  26.                 return -1;
  27.         }

  28.         if(offset+len>256)
  29.         {
  30.                 return -1;
  31.         }

  32.         _buf[0]=offset;
  33.         for(i=0;i<len;i++)
  34.         {
  35.             _buf[1+i]=buf[i];
  36.             printf("----_writedata:%x------\n",_buf[1+i]);
  37.         }

  38.         msg_rdwr.msgs = &i2cmsg;
  39.         msg_rdwr.nmsgs = 1;

  40.         i2cmsg.addr  = addr;
  41.         i2cmsg.flags = 0;
  42.         i2cmsg.len   = 1+len;
  43.         i2cmsg.buf   = _buf;

  44.         if((i=ioctl(fd,I2C_RDWR,&msg_rdwr))<0){
  45.                 perror("i2c_write ioctl() error");
  46.                 fprintf(stderr,"ioctl returned %d\n",i);
  47.                 return -1;
  48.         }

  49.         return 0;
  50. }

  51. int
  52. i2c_read(int fd,
  53.                         unsigned int addr,
  54.                         unsigned int offset,
  55.                         unsigned char *buf,
  56.                         unsigned int len)
  57. {
  58.         struct i2c_rdwr_ioctl_data msg_rdwr;
  59.         struct i2c_msg i2cmsg;
  60.         int i;

  61.         if(len>MAX_BYTES)
  62.         {
  63.                 return -1;
  64.         }

  65.         if(i2c_write(fd,addr,offset,NULL,0)<0)
  66.         {
  67.         printf("error! line: %d\n", __LINE__);
  68.             return -1;
  69.         }
  70.        
  71.         msg_rdwr.msgs = &i2cmsg;
  72.         msg_rdwr.nmsgs = 1;
  73.        
  74.         i2cmsg.addr  = addr;
  75.         i2cmsg.flags = I2C_M_RD;
  76.         i2cmsg.len   = len;
  77.         i2cmsg.buf   = buf;


  78.         if((i=ioctl(fd,I2C_RDWR,&msg_rdwr))<0){
  79.             perror("ioctl()");
  80.         printf("error! line: %d\n", __LINE__);
  81.             fprintf(stderr,"ioctl returned %d\n",i);
  82.             return -1;
  83.         }

  84.         return 0;
  85. }



  86. int main(int argc, char** argv)
  87. {
  88.         printf("----camera test start---------\n");
  89.    
  90.     if(argc != 2){
  91.         printf("Error Usage!\r\n");
  92.         return -1;
  93.     }

  94.     char * filename = argv[1];
  95.        
  96.         int fd =open(filename, O_RDWR);
  97.         if (fd< 0)
  98.         {
  99.                 printf("open filename failed\n");
  100.                 return -1;
  101.         }

  102.         unsigned int addr = 0x21;
  103.     unsigned int addr2 = 0x42;
  104.         unsigned int offset = 0;
  105.         unsigned char writebuf[2]={0x26,0x52};
  106.         unsigned char readbuf[2];
  107.         unsigned int len = 1;
  108.        
  109.         i2c_read(fd,addr,offset,readbuf,len);
  110.     printf("read i2cdevice:%s addr: %x data is:%x-----\n",filename,
  111.                 addr,
  112.                 readbuf[0]);

  113.         i2c_read(fd,addr2,offset,readbuf,len);
  114.     printf("read i2cdevice:%s addr: %x data is:%x-----\n",filename,
  115.                 addr2,
  116.                 readbuf[0]);
  117.         memset(readbuf,0,sizeof(readbuf));

  118.         //i2c_write(fd,addr,offset,writebuf,len);
  119.        
  120.         //i2c_read(fd,addr,offset,readbuf,len);
  121.        
  122.         printf("----end---------\n");
  123.         close(fd);
  124.         return 0;
  125. }
复制代码



最佳答案

查看完整内容[请看2#楼]

解决了,原因是权限错误。 在编译好执行文件后再chmod 777 改变执行文件的权限就可以在目标板上运行了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

16

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2019-10-29
在线时间
5 小时
 楼主| 发表于 2019-11-21 17:20:17 | 显示全部楼层
解决了,原因是权限错误。
在编译好执行文件后再chmod 777 改变执行文件的权限就可以在目标板上运行了。
回复

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-11-21 19:36:53 | 显示全部楼层
帮顶      
成功没有捷径
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4021
金钱
4021
注册时间
2015-11-14
在线时间
543 小时
发表于 2019-11-21 23:12:22 | 显示全部楼层
帮顶  
回复

使用道具 举报

9

主题

890

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2391
金钱
2391
注册时间
2019-9-25
在线时间
397 小时
发表于 2019-11-22 09:56:20 | 显示全部楼层
你是说拷贝到文件系统以后手动执行没有反应还是设置了自动运行没反应?
回复

使用道具 举报

4

主题

16

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2019-10-29
在线时间
5 小时
 楼主| 发表于 2019-11-22 10:29:53 | 显示全部楼层
仰望星空之云 发表于 2019-11-22 09:56
你是说拷贝到文件系统以后手动执行没有反应还是设置了自动运行没反应?

是手动执行的没有反应
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2019-10-19
在线时间
10 小时
发表于 2019-11-22 10:44:40 | 显示全部楼层
没有正常执行,你第一句打印都没显示出来,做两件事,1.编译一个hello world确定编译链没问题 2.使用dmeg命令,看是不是打印了没显示出来
回复

使用道具 举报

4

主题

16

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2019-10-29
在线时间
5 小时
 楼主| 发表于 2019-11-22 11:37:02 | 显示全部楼层
jun1172 发表于 2019-11-22 10:44
没有正常执行,你第一句打印都没显示出来,做两件事,1.编译一个hello world确定编译链没问题 2.使用dmeg命 ...

谢谢,是编译好的文件权限问题。好奇怪,不知道怎么解释。
回复

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-11-22 12:36:47 | 显示全部楼层
帮顶      
回复

使用道具 举报

7

主题

237

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1110
金钱
1110
注册时间
2019-5-6
在线时间
128 小时
发表于 2019-11-24 07:06:33 | 显示全部楼层
感谢楼主分享
一步一个脚印
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-23 05:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表