Я хочу выполнить операцию чтения и записи на / dev / i2 c -0 на плате sama5d27_som (arm_cortex_A5). Поэтому я использовал i2c_smbus_read_byte () в моей программе. Я установил следующие пакеты libi2 c -dev и i2 c -tools в мою ubuntu18.04. Но во время кросс-компиляции я получил следующую ошибку:
~/guru/projects/i2c$ arm-linux-gnueabihf-gcc main.c
/tmp/ccW1Pk9X.o: In function `main':
main.c:(.text+0xf6): undefined reference to `i2c_smbus_read_byte'
collect2: error: ld returned 1 exit status
gp@guru-hp:~/guru/projects/i2c$
Вот исходный код. Пожалуйста, посмотрите и помогите мне в этом. Спасибо
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>
int main(void)
{
printf("Wellcome to device programming.\n");
printf("Enter i2c port no : ");
u_int8_t prt = 0;
scanf("%c",&prt);
char pth[18] = {0};
sprintf(pth,"/dev/i2c-%c",prt);
int fd = open(pth,O_RDWR);
if(fd > 0)
{
printf("%s has been opened\n",pth);
int rt_ctl = 0;
for(int i=0;i<=60;i+=10)
{
if(!i)
{
printf(" ");
for(int i=0;i<=0xf;i++)
{
printf("%x ",i);
}
printf("\n");
}
printf("%.2d: ",i);
for(int j=0x0;j<=0xf;j++)
{
rt_ctl = ioctl(fd,I2C_SLAVE,i+j);
if(rt_ctl < 0)
{
printf("-- ");
//perror("ioctl() failed due to : ");
}
else
{
rt_ctl = i2c_smbus_read_byte(fd);
if(rt_ctl < 0)
{
printf("-- ");
}
else
{
printf("%02x ",j);
}
}
}
printf("\n");
}
close(fd);
}
}