Ошибка получения ссылки для i2c_smbus_read_byte () - PullRequest
0 голосов
/ 16 марта 2020

Я хочу выполнить операцию чтения и записи на / 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);
     }

 }
...