新手上路
- 积分
- 37
- 金钱
- 37
- 注册时间
- 2019-10-29
- 在线时间
- 5 小时
|
1金钱
我编译了个测试文件,手动拷贝到SD卡的文件系统的lib目录下,系统启动之后我在终端执行这个bin文件,可是没有任何打印(只要执行就是有打印的)
感觉就像没有执行一样
文件格式如下
代码如下
- #include<stdio.h>
- #include<linux/types.h>
- #include<fcntl.h>
- #include<unistd.h>
- #include<stdlib.h>
- #include<sys/types.h>
- #include<sys/ioctl.h>
- #include<string.h>
- #include<linux/i2c.h>
- #include<linux/i2c-dev.h>
-
- #define MAX_BYTES 2
- #define DEFAULT_I2C_BUS "/dev/i2c-0"
-
- int
- i2c_write(int fd,
- unsigned int addr,
- unsigned int offset,
- unsigned char *buf,
- unsigned int len)
- {
- struct i2c_rdwr_ioctl_data msg_rdwr;
- struct i2c_msg i2cmsg;
- int i;
- char _buf[MAX_BYTES+1];
-
- if(len>MAX_BYTES)
- {
- return -1;
- }
-
- if(offset+len>256)
- {
- return -1;
- }
-
- _buf[0]=offset;
- for(i=0;i<len;i++)
- {
- _buf[1+i]=buf[i];
- printf("----_writedata:%x------\n",_buf[1+i]);
- }
-
- msg_rdwr.msgs = &i2cmsg;
- msg_rdwr.nmsgs = 1;
-
- i2cmsg.addr = addr;
- i2cmsg.flags = 0;
- i2cmsg.len = 1+len;
- i2cmsg.buf = _buf;
-
- if((i=ioctl(fd,I2C_RDWR,&msg_rdwr))<0){
- perror("i2c_write ioctl() error");
- fprintf(stderr,"ioctl returned %d\n",i);
- return -1;
- }
-
- return 0;
- }
-
- int
- i2c_read(int fd,
- unsigned int addr,
- unsigned int offset,
- unsigned char *buf,
- unsigned int len)
- {
- struct i2c_rdwr_ioctl_data msg_rdwr;
- struct i2c_msg i2cmsg;
- int i;
-
- if(len>MAX_BYTES)
- {
- return -1;
- }
-
- if(i2c_write(fd,addr,offset,NULL,0)<0)
- {
- printf("error! line: %d\n", __LINE__);
- return -1;
- }
-
- msg_rdwr.msgs = &i2cmsg;
- msg_rdwr.nmsgs = 1;
-
- i2cmsg.addr = addr;
- i2cmsg.flags = I2C_M_RD;
- i2cmsg.len = len;
- i2cmsg.buf = buf;
-
-
- if((i=ioctl(fd,I2C_RDWR,&msg_rdwr))<0){
- perror("ioctl()");
- printf("error! line: %d\n", __LINE__);
- fprintf(stderr,"ioctl returned %d\n",i);
- return -1;
- }
-
- return 0;
- }
-
-
-
- int main(int argc, char** argv)
- {
- printf("----camera test start---------\n");
-
- if(argc != 2){
- printf("Error Usage!\r\n");
- return -1;
- }
- char * filename = argv[1];
-
- int fd =open(filename, O_RDWR);
- if (fd< 0)
- {
- printf("open filename failed\n");
- return -1;
- }
-
- unsigned int addr = 0x21;
- unsigned int addr2 = 0x42;
- unsigned int offset = 0;
- unsigned char writebuf[2]={0x26,0x52};
- unsigned char readbuf[2];
- unsigned int len = 1;
-
- i2c_read(fd,addr,offset,readbuf,len);
- printf("read i2cdevice:%s addr: %x data is:%x-----\n",filename,
- addr,
- readbuf[0]);
- i2c_read(fd,addr2,offset,readbuf,len);
- printf("read i2cdevice:%s addr: %x data is:%x-----\n",filename,
- addr2,
- readbuf[0]);
- memset(readbuf,0,sizeof(readbuf));
-
- //i2c_write(fd,addr,offset,writebuf,len);
-
- //i2c_read(fd,addr,offset,readbuf,len);
-
- printf("----end---------\n");
- close(fd);
- return 0;
- }
复制代码
|
最佳答案
查看完整内容[请看2#楼]
解决了,原因是权限错误。
在编译好执行文件后再chmod 777 改变执行文件的权限就可以在目标板上运行了。
|