Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rpi_gpio.so compiled as 32-bit on 64-bit system #24

Open
vanne opened this issue Sep 22, 2020 · 3 comments
Open

rpi_gpio.so compiled as 32-bit on 64-bit system #24

vanne opened this issue Sep 22, 2020 · 3 comments

Comments

@vanne
Copy link

vanne commented Sep 22, 2020

On Ubuntu 20.04 LTS 64-bit, the gem installs fine but rpi_gpio.so is compiled as a 32-bit lib.

"rpi_gpio.so: wrong ELF class: ELFCLASS32"

ubuntu@rpi4:~/test$ uname -a
Linux rpi4 5.4.0-1018-raspi #20-Ubuntu SMP Sun Sep 6 05:11:16 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux
ubuntu@rpi4:~/test$ rbenv version
2.7.1 (set by /home/ubuntu/.rbenv/version)
ubuntu@rpi4:~/test$ 

ubuntu@rpi4:~/test$ cat test.rb 
require 'rpi_gpio'
ubuntu@rpi4:~/test$ bundle exec ruby test.rb 
Traceback (most recent call last):
	3: from test.rb:1:in `<main>'
	2: from test.rb:1:in `require'
	1: from /home/ubuntu/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rpi_gpio-0.5.0/lib/rpi_gpio.rb:1:in `<top (required)>'
/home/ubuntu/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rpi_gpio-0.5.0/lib/rpi_gpio.rb:1:in `require': /home/ubuntu/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rpi_gpio-0.5.0/lib/rpi_gpio/rpi_gpio.so: wrong ELF class: ELFCLASS32 - /home/ubuntu/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rpi_gpio-0.5.0/lib/rpi_gpio/rpi_gpio.so (LoadError)
ubuntu@rpi4:~/test$
@vanne
Copy link
Author

vanne commented Sep 22, 2020

When checking out the repository and build manually, things are fine:

ubuntu@rpi4:~$ git clone https://github.com/ClockVapor/rpi_gpio.git
Cloning into 'rpi_gpio'...
remote: Enumerating objects: 110, done.
remote: Counting objects: 100% (110/110), done.
remote: Compressing objects: 100% (65/65), done.
remote: Total 426 (delta 51), reused 73 (delta 27), pack-reused 316
Receiving objects: 100% (426/426), 241.55 KiB | 1.05 MiB/s, done.
Resolving deltas: 100% (242/242), done.
ubuntu@rpi4:~$ cd rpi_gpio/ext/rpi_gpio/
ubuntu@rpi4:~/rpi_gpio/ext/rpi_gpio$ ruby extconf.rb 
creating Makefile
ubuntu@rpi4:~/rpi_gpio/ext/rpi_gpio$ make
<snip>
linking shared-object rpi_gpio/rpi_gpio.so
ubuntu@rpi4:~/rpi_gpio/ext/rpi_gpio$ file rpi_gpio.so 
rpi_gpio.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, BuildID[sha1]=9d7712484c2ed99db38dc4aa316ed47cc853e18a, with debug_info, not stripped
ubuntu@rpi4:~/rpi_gpio/ext/rpi_gpio$ make install
/usr/bin/install -c -m 0755 rpi_gpio.so /home/ubuntu/.rbenv/versions/2.7.1/lib/ruby/site_ruby/2.7.0/aarch64-linux/rpi_gpio
ubuntu@rpi4:~/rpi_gpio/ext/rpi_gpio$ 

@phykos
Copy link

phykos commented Oct 26, 2020

Encountered this error because I am on AArch64 too.
So far, on 5 years of Ruby I never seen such error.

edit: tried to build the gem myself and I got this:

compiling c_gpio.c
c_gpio.c: In function ‘setup’:
c_gpio.c:134:9: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  134 |     if ((uint32_t)gpio_mem % PAGE_SIZE)
      |         ^
c_gpio.c:135:34: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  135 |         gpio_mem += PAGE_SIZE - ((uint32_t)gpio_mem % PAGE_SIZE);
      |                                  ^
c_gpio.c: At top level:
cc1: note: unrecognized command-line option ‘-Wno-self-assign’ may have been intended to silence earlier diagnostics
cc1: note: unrecognized command-line option ‘-Wno-parentheses-equality’ may have been intended to silence earlier diagnostics
cc1: note: unrecognized command-line option ‘-Wno-constant-logical-operand’ may have been intended to silence earlier diagnostics
compiling common.c
compiling cpuinfo.c
cpuinfo.c: In function ‘get_rpi_info’:
cpuinfo.c:86:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   86 |                case '0': info->type = "Model A"; info->p1_revision = 2; break;
      |                                     ^
cpuinfo.c:87:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   87 |                case '1': info->type = "Model B"; info->p1_revision = 2; break;
      |                                     ^
cpuinfo.c:88:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   88 |                case '2': info->type = "Model A+"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:89:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   89 |                case '3': info->type = "Model B+"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:90:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   90 |                case '4': info->type = "Pi 2 Model B"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:91:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   91 |                case '5': info->type = "Alpha"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:92:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   92 |                case '6': info->type = "Compute Module 1"; info->p1_revision = 0; break;
      |                                     ^
cpuinfo.c:93:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   93 |                case '8': info->type = "Pi 3 Model B"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:94:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   94 |                case '9': info->type = "Zero"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:95:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   95 |                case 'a': info->type = "Compute Module 3"; info->p1_revision = 0; break;
      |                                     ^
cpuinfo.c:96:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   96 |                case 'c': info->type = "Zero W"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:97:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   97 |                case 'd': info->type = "Pi 3 Model B+"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:98:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   98 |                case 'e': info->type = "Pi 3 Model A+"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:99:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   99 |                default : info->type = "Unknown"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:103:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  103 |                case '0': info->type = "Compute Module 3+"; info->p1_revision = 0; break;
      |                                     ^
cpuinfo.c:104:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  104 |                case '1': info->type = "Pi 4 Model B"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:105:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  105 |                default : info->type = "Unknown"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:107:30: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  107 |          default: info->type = "Unknown"; info->p1_revision = 3; break;
      |                              ^
cpuinfo.c:111:36: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  111 |          case '0': info->processor = "BCM2835"; break;
      |                                    ^
cpuinfo.c:112:36: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  112 |          case '1': info->processor = "BCM2836"; break;
      |                                    ^
cpuinfo.c:113:36: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  113 |          case '2': info->processor = "BCM2837"; break;
      |                                    ^
cpuinfo.c:114:36: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  114 |          case '3': info->processor = "BCM2711"; break;
      |                                    ^
cpuinfo.c:115:36: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  115 |          default : info->processor = "Unknown"; break;
      |                                    ^
cpuinfo.c:118:39: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  118 |          case '0': info->manufacturer = "Sony"; break;
      |                                       ^
cpuinfo.c:119:39: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  119 |          case '1': info->manufacturer = "Egoman"; break;
      |                                       ^
cpuinfo.c:120:39: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  120 |          case '2': info->manufacturer = "Embest"; break;
      |                                       ^
cpuinfo.c:121:39: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  121 |          case '3': info->manufacturer = "Sony Japan"; break;
      |                                       ^
cpuinfo.c:122:39: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  122 |          case '4': info->manufacturer = "Embest"; break;
      |                                       ^
cpuinfo.c:123:39: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  123 |          case '5': info->manufacturer = "Stadium"; break;
      |                                       ^
cpuinfo.c:124:39: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  124 |          default : info->manufacturer = "Unknown"; break;
      |                                       ^
cpuinfo.c:127:28: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  127 |          case 0: info->ram = "256M"; break;
      |                            ^
cpuinfo.c:128:28: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  128 |          case 1: info->ram = "512M"; break;
      |                            ^
cpuinfo.c:129:28: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  129 |          case 2: info->ram = "1G"; break;
      |                            ^
cpuinfo.c:130:28: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  130 |          case 3: info->ram = "2G"; break;
      |                            ^
cpuinfo.c:131:28: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  131 |          case 4: info->ram = "4G"; break;
      |                            ^
cpuinfo.c:132:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  132 |          default: info->ram = "Unknown"; break;
      |                             ^
cpuinfo.c:136:17: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  136 |       info->ram = "Unknown";
      |                 ^
cpuinfo.c:137:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  137 |       info->manufacturer = "Unknown";
      |                          ^
cpuinfo.c:138:23: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  138 |       info->processor = "Unknown";
      |                       ^
cpuinfo.c:139:18: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  139 |       info->type = "Unknown";
      |                  ^
cpuinfo.c:143:28: warning: format ‘%llx’ expects argument of type ‘long long unsigned int *’, but argument 3 has type ‘uint64_t *’ {aka ‘long unsigned int *’} [-Wformat=]
  143 |       sscanf(revision, "%llx", &rev);
      |                         ~~~^   ~~~~
      |                            |   |
      |                            |   uint64_t * {aka long unsigned int *}
      |                            long long unsigned int *
      |                         %lx
cpuinfo.c:147:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  147 |          info->type = "Model B";
      |                     ^
cpuinfo.c:149:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  149 |          info->ram = "256M";
      |                    ^
cpuinfo.c:150:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  150 |          info->manufacturer = "Egoman";
      |                             ^
cpuinfo.c:151:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  151 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:153:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  153 |          info->type = "Model B";
      |                     ^
cpuinfo.c:155:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  155 |          info->ram = "256M";
      |                    ^
cpuinfo.c:156:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  156 |          info->manufacturer = "Sony UK";
      |                             ^
cpuinfo.c:157:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  157 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:159:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  159 |          info->type = "Model B";
      |                     ^
cpuinfo.c:161:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  161 |          info->ram = "256M";
      |                    ^
cpuinfo.c:162:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  162 |          info->manufacturer = "Qisda";
      |                             ^
cpuinfo.c:163:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  163 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:165:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  165 |          info->type = "Model B";
      |                     ^
cpuinfo.c:167:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  167 |          info->ram = "256M";
      |                    ^
cpuinfo.c:168:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  168 |          info->manufacturer = "Egoman";
      |                             ^
cpuinfo.c:169:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  169 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:171:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  171 |          info->type = "Model A";
      |                     ^
cpuinfo.c:173:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  173 |          info->ram = "256M";
      |                    ^
cpuinfo.c:174:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  174 |          info->manufacturer = "Egoman";
      |                             ^
cpuinfo.c:175:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  175 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:177:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  177 |          info->type = "Model A";
      |                     ^
cpuinfo.c:179:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  179 |          info->ram = "256M";
      |                    ^
cpuinfo.c:180:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  180 |          info->manufacturer = "Sony UK";
      |                             ^
cpuinfo.c:181:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  181 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:183:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  183 |          info->type = "Model A";
      |                     ^
cpuinfo.c:185:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  185 |          info->ram = "256M";
      |                    ^
cpuinfo.c:186:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  186 |          info->manufacturer = "Qisda";
      |                             ^
cpuinfo.c:187:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  187 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:189:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  189 |          info->type = "Model B";
      |                     ^
cpuinfo.c:191:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  191 |          info->ram = "512M";
      |                    ^
cpuinfo.c:192:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  192 |          info->manufacturer = "Egoman";
      |                             ^
cpuinfo.c:193:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  193 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:195:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  195 |          info->type = "Model B";
      |                     ^
cpuinfo.c:197:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  197 |          info->ram = "512M";
      |                    ^
cpuinfo.c:198:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  198 |          info->manufacturer = "Sony UK";
      |                             ^
cpuinfo.c:199:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  199 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:201:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  201 |          info->type = "Model B";
      |                     ^
cpuinfo.c:203:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  203 |          info->ram = "512M";
      |                    ^
cpuinfo.c:204:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  204 |          info->manufacturer = "Qisda";
      |                             ^
cpuinfo.c:205:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  205 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:207:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  207 |          info->type = "Model B+";
      |                     ^
cpuinfo.c:209:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  209 |          info->ram = "512M";
      |                    ^
cpuinfo.c:210:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  210 |          info->manufacturer = "Sony UK";
      |                             ^
cpuinfo.c:211:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  211 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:213:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  213 |          info->type = "Compute Module 1";
      |                     ^
cpuinfo.c:215:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  215 |          info->ram = "512M";
      |                    ^
cpuinfo.c:216:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  216 |          info->manufacturer = "Sony UK";
      |                             ^
cpuinfo.c:217:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  217 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:219:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  219 |          info->type = "Model A+";
      |                     ^
cpuinfo.c:221:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  221 |          info->ram = "256M";
      |                    ^
cpuinfo.c:222:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  222 |          info->manufacturer = "Sony UK";
      |                             ^
cpuinfo.c:223:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  223 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:225:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  225 |          info->type = "Model B+";
      |                     ^
cpuinfo.c:227:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  227 |          info->ram = "512M";
      |                    ^
cpuinfo.c:228:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  228 |          info->manufacturer = "Embest";
      |                             ^
cpuinfo.c:229:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  229 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:231:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  231 |          info->type = "Compute Module 1";
      |                     ^
cpuinfo.c:233:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  233 |          info->ram = "512M";
      |                    ^
cpuinfo.c:234:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  234 |          info->manufacturer = "Embest";
      |                             ^
cpuinfo.c:235:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  235 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:237:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  237 |          info->type = "Model A+";
      |                     ^
cpuinfo.c:239:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  239 |          info->ram = "Unknown";
      |                    ^
cpuinfo.c:240:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  240 |          info->manufacturer = "Embest";
      |                             ^
cpuinfo.c:241:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  241 |          info->processor = "BCM2835";compiling c_gpio.c
c_gpio.c: In function ‘setup’:
c_gpio.c:134:9: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  134 |     if ((uint32_t)gpio_mem % PAGE_SIZE)
      |         ^
c_gpio.c:135:34: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  135 |         gpio_mem += PAGE_SIZE - ((uint32_t)gpio_mem % PAGE_SIZE);
      |                                  ^
c_gpio.c: At top level:
cc1: note: unrecognized command-line option ‘-Wno-self-assign’ may have been intended to silence earlier diagnostics
cc1: note: unrecognized command-line option ‘-Wno-parentheses-equality’ may have been intended to silence earlier diagnostics
cc1: note: unrecognized command-line option ‘-Wno-constant-logical-operand’ may have been intended to silence earlier diagnostics
compiling common.c
compiling cpuinfo.c
cpuinfo.c: In function ‘get_rpi_info’:
cpuinfo.c:86:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   86 |                case '0': info->type = "Model A"; info->p1_revision = 2; break;
      |                                     ^
cpuinfo.c:87:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   87 |                case '1': info->type = "Model B"; info->p1_revision = 2; break;
      |                                     ^
cpuinfo.c:88:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   88 |                case '2': info->type = "Model A+"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:89:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   89 |                case '3': info->type = "Model B+"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:90:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   90 |                case '4': info->type = "Pi 2 Model B"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:91:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   91 |                case '5': info->type = "Alpha"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:92:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   92 |                case '6': info->type = "Compute Module 1"; info->p1_revision = 0; break;
      |                                     ^
cpuinfo.c:93:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   93 |                case '8': info->type = "Pi 3 Model B"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:94:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   94 |                case '9': info->type = "Zero"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:95:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   95 |                case 'a': info->type = "Compute Module 3"; info->p1_revision = 0; break;
      |                                     ^
cpuinfo.c:96:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   96 |                case 'c': info->type = "Zero W"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:97:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   97 |                case 'd': info->type = "Pi 3 Model B+"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:98:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   98 |                case 'e': info->type = "Pi 3 Model A+"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:99:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   99 |                default : info->type = "Unknown"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:103:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  103 |                case '0': info->type = "Compute Module 3+"; info->p1_revision = 0; break;
      |                                     ^
cpuinfo.c:104:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  104 |                case '1': info->type = "Pi 4 Model B"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:105:37: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  105 |                default : info->type = "Unknown"; info->p1_revision = 3; break;
      |                                     ^
cpuinfo.c:107:30: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  107 |          default: info->type = "Unknown"; info->p1_revision = 3; break;
      |                              ^
cpuinfo.c:111:36: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  111 |          case '0': info->processor = "BCM2835"; break;
      |                                    ^
cpuinfo.c:112:36: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  112 |          case '1': info->processor = "BCM2836"; break;
      |                                    ^
cpuinfo.c:113:36: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  113 |          case '2': info->processor = "BCM2837"; break;
      |                                    ^
cpuinfo.c:114:36: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  114 |          case '3': info->processor = "BCM2711"; break;
      |                                    ^
cpuinfo.c:115:36: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  115 |          default : info->processor = "Unknown"; break;
      |                                    ^
cpuinfo.c:118:39: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  118 |          case '0': info->manufacturer = "Sony"; break;
      |                                       ^
cpuinfo.c:119:39: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  119 |          case '1': info->manufacturer = "Egoman"; break;
      |                                       ^
cpuinfo.c:120:39: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  120 |          case '2': info->manufacturer = "Embest"; break;
      |                                       ^
cpuinfo.c:121:39: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  121 |          case '3': info->manufacturer = "Sony Japan"; break;
      |                                       ^
cpuinfo.c:122:39: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  122 |          case '4': info->manufacturer = "Embest"; break;
      |                                       ^
cpuinfo.c:123:39: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  123 |          case '5': info->manufacturer = "Stadium"; break;
      |                                       ^
cpuinfo.c:124:39: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  124 |          default : info->manufacturer = "Unknown"; break;
      |                                       ^
cpuinfo.c:127:28: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  127 |          case 0: info->ram = "256M"; break;
      |                            ^
cpuinfo.c:128:28: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  128 |          case 1: info->ram = "512M"; break;
      |                            ^
cpuinfo.c:129:28: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  129 |          case 2: info->ram = "1G"; break;
      |                            ^
cpuinfo.c:130:28: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  130 |          case 3: info->ram = "2G"; break;
      |                            ^
cpuinfo.c:131:28: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  131 |          case 4: info->ram = "4G"; break;
      |                            ^
cpuinfo.c:132:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  132 |          default: info->ram = "Unknown"; break;
      |                             ^
cpuinfo.c:136:17: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  136 |       info->ram = "Unknown";
      |                 ^
cpuinfo.c:137:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  137 |       info->manufacturer = "Unknown";
      |                          ^
cpuinfo.c:138:23: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  138 |       info->processor = "Unknown";
      |                       ^
cpuinfo.c:139:18: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  139 |       info->type = "Unknown";
      |                  ^
cpuinfo.c:143:28: warning: format ‘%llx’ expects argument of type ‘long long unsigned int *’, but argument 3 has type ‘uint64_t *’ {aka ‘long unsigned int *’} [-Wformat=]
  143 |       sscanf(revision, "%llx", &rev);
      |                         ~~~^   ~~~~
      |                            |   |
      |                            |   uint64_t * {aka long unsigned int *}
      |                            long long unsigned int *
      |                         %lx
cpuinfo.c:147:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  147 |          info->type = "Model B";
      |                     ^
cpuinfo.c:149:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  149 |          info->ram = "256M";
      |                    ^
cpuinfo.c:150:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  150 |          info->manufacturer = "Egoman";
      |                             ^
cpuinfo.c:151:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  151 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:153:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  153 |          info->type = "Model B";
      |                     ^
cpuinfo.c:155:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  155 |          info->ram = "256M";
      |                    ^
cpuinfo.c:156:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  156 |          info->manufacturer = "Sony UK";
      |                             ^
cpuinfo.c:157:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  157 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:159:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  159 |          info->type = "Model B";
      |                     ^
cpuinfo.c:161:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  161 |          info->ram = "256M";
      |                    ^
cpuinfo.c:162:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  162 |          info->manufacturer = "Qisda";
      |                             ^
cpuinfo.c:163:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  163 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:165:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  165 |          info->type = "Model B";
      |                     ^
cpuinfo.c:167:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  167 |          info->ram = "256M";
      |                    ^
cpuinfo.c:168:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  168 |          info->manufacturer = "Egoman";
      |                             ^
cpuinfo.c:169:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  169 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:171:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  171 |          info->type = "Model A";
      |                     ^
cpuinfo.c:173:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  173 |          info->ram = "256M";
      |                    ^
cpuinfo.c:174:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  174 |          info->manufacturer = "Egoman";
      |                             ^
cpuinfo.c:175:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  175 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:177:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  177 |          info->type = "Model A";
      |                     ^
cpuinfo.c:179:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  179 |          info->ram = "256M";
      |                    ^
cpuinfo.c:180:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  180 |          info->manufacturer = "Sony UK";
      |                             ^
cpuinfo.c:181:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  181 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:183:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  183 |          info->type = "Model A";
      |                     ^
cpuinfo.c:185:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  185 |          info->ram = "256M";
      |                    ^
cpuinfo.c:186:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  186 |          info->manufacturer = "Qisda";
      |                             ^
cpuinfo.c:187:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  187 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:189:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  189 |          info->type = "Model B";
      |                     ^
cpuinfo.c:191:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  191 |          info->ram = "512M";
      |                    ^
cpuinfo.c:192:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  192 |          info->manufacturer = "Egoman";
      |                             ^
cpuinfo.c:193:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  193 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:195:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  195 |          info->type = "Model B";
      |                     ^
cpuinfo.c:197:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  197 |          info->ram = "512M";
      |                    ^
cpuinfo.c:198:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  198 |          info->manufacturer = "Sony UK";
      |                             ^
cpuinfo.c:199:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  199 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:201:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  201 |          info->type = "Model B";
      |                     ^
cpuinfo.c:203:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  203 |          info->ram = "512M";
      |                    ^
cpuinfo.c:204:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  204 |          info->manufacturer = "Qisda";
      |                             ^
cpuinfo.c:205:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  205 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:207:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  207 |          info->type = "Model B+";
      |                     ^
cpuinfo.c:209:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  209 |          info->ram = "512M";
      |                    ^
cpuinfo.c:210:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  210 |          info->manufacturer = "Sony UK";
      |                             ^
cpuinfo.c:211:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  211 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:213:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  213 |          info->type = "Compute Module 1";
      |                     ^
cpuinfo.c:215:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  215 |          info->ram = "512M";
      |                    ^
cpuinfo.c:216:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  216 |          info->manufacturer = "Sony UK";
      |                             ^
cpuinfo.c:217:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  217 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:219:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  219 |          info->type = "Model A+";
      |                     ^
cpuinfo.c:221:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  221 |          info->ram = "256M";
      |                    ^
cpuinfo.c:222:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  222 |          info->manufacturer = "Sony UK";
      |                             ^
cpuinfo.c:223:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  223 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:225:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  225 |          info->type = "Model B+";
      |                     ^
cpuinfo.c:227:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  227 |          info->ram = "512M";
      |                    ^
cpuinfo.c:228:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  228 |          info->manufacturer = "Embest";
      |                             ^
cpuinfo.c:229:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  229 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:231:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  231 |          info->type = "Compute Module 1";
      |                     ^
cpuinfo.c:233:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  233 |          info->ram = "512M";
      |                    ^
cpuinfo.c:234:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  234 |          info->manufacturer = "Embest";
      |                             ^
cpuinfo.c:235:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  235 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c:237:21: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  237 |          info->type = "Model A+";
      |                     ^
cpuinfo.c:239:20: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  239 |          info->ram = "Unknown";
      |                    ^
cpuinfo.c:240:29: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  240 |          info->manufacturer = "Embest";
      |                             ^
cpuinfo.c:241:26: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  241 |          info->processor = "BCM2835";
      |                          ^
cpuinfo.c: At top level:
cc1: note: unrecognized command-line option ‘-Wno-self-assign’ may have been intended to silence earlier diagnostics
cc1: note: unrecognized command-line option ‘-Wno-parentheses-equality’ may have been intended to silence earlier diagnostics
cc1: note: unrecognized command-line option ‘-Wno-constant-logical-operand’ may have been intended to silence earlier diagnostics
compiling rb_gpio.c
compiling rb_pwm.c
compiling rpi_gpio.c
compiling soft_pwm.c
soft_pwm.c: In function ‘pwm_thread’:
soft_pwm.c:95:7: warning: function might be candidate for attribute ‘noreturn’ [-Wsuggest-attribute=noreturn]
   95 | void *pwm_thread(void *threadarg)
      |       ^~~~~~~~~~
soft_pwm.c: At top level:
cc1: note: unrecognized command-line option ‘-Wno-self-assign’ may have been intended to silence earlier diagnostics
cc1: note: unrecognized command-line option ‘-Wno-parentheses-equality’ may have been intended to silence earlier diagnostics
cc1: note: unrecognized command-line option ‘-Wno-constant-logical-operand’ may have been intended to silence earlier diagnostics
linking shared-object rpi_gpio/rpi_gpio.so
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:37: multiple definition of `gpio_mode'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:37: first defined here
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:43: multiple definition of `rpiinfo'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:43: first defined here
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:41: multiple definition of `pin_to_gpio'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:41: first defined here
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:45: multiple definition of `module_setup'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:45: first defined here
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:44: multiple definition of `setup_error'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:44: first defined here
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:42: multiple definition of `gpio_direction'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:42: first defined here
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:40: multiple definition of `pin_to_gpio_rev3'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:40: first defined here
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:39: multiple definition of `pin_to_gpio_rev2'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:39: first defined here
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:38: multiple definition of `pin_to_gpio_rev1'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:38: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:42: multiple definition of `gpio_direction'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:42: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:45: multiple definition of `module_setup'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:45: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:44: multiple definition of `setup_error'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:44: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:43: multiple definition of `rpiinfo'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:43: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:41: multiple definition of `pin_to_gpio'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:41: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:40: multiple definition of `pin_to_gpio_rev3'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:40: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:39: multiple definition of `pin_to_gpio_rev2'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:39: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:38: multiple definition of `pin_to_gpio_rev1'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:38: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:37: multiple definition of `gpio_mode'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:37: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:45: multiple definition of `module_setup'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:45: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:44: multiple definition of `setup_error'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:44: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:43: multiple definition of `rpiinfo'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:43: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:42: multiple definition of `gpio_direction'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:42: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:41: multiple definition of `pin_to_gpio'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:41: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:40: multiple definition of `pin_to_gpio_rev3'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:40: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:39: multiple definition of `pin_to_gpio_rev2'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:39: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:38: multiple definition of `pin_to_gpio_rev1'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:38: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:37: multiple definition of `gpio_mode'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:37: first defined here
collect2: error: ld returned 1 exit status
make: *** [Makefile:262: rpi_gpio.so] Error 1

      |                          ^
cpuinfo.c: At top level:
cc1: note: unrecognized command-line option ‘-Wno-self-assign’ may have been intended to silence earlier diagnostics
cc1: note: unrecognized command-line option ‘-Wno-parentheses-equality’ may have been intended to silence earlier diagnostics
cc1: note: unrecognized command-line option ‘-Wno-constant-logical-operand’ may have been intended to silence earlier diagnostics
compiling rb_gpio.c
compiling rb_pwm.c
compiling rpi_gpio.c
compiling soft_pwm.c
soft_pwm.c: In function ‘pwm_thread’:
soft_pwm.c:95:7: warning: function might be candidate for attribute ‘noreturn’ [-Wsuggest-attribute=noreturn]
   95 | void *pwm_thread(void *threadarg)
      |       ^~~~~~~~~~
soft_pwm.c: At top level:
cc1: note: unrecognized command-line option ‘-Wno-self-assign’ may have been intended to silence earlier diagnostics
cc1: note: unrecognized command-line option ‘-Wno-parentheses-equality’ may have been intended to silence earlier diagnostics
cc1: note: unrecognized command-line option ‘-Wno-constant-logical-operand’ may have been intended to silence earlier diagnostics
linking shared-object rpi_gpio/rpi_gpio.so
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:37: multiple definition of `gpio_mode'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:37: first defined here
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:43: multiple definition of `rpiinfo'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:43: first defined here
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:41: multiple definition of `pin_to_gpio'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:41: first defined here
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:45: multiple definition of `module_setup'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:45: first defined here
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:44: multiple definition of `setup_error'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:44: first defined here
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:42: multiple definition of `gpio_direction'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:42: first defined here
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:40: multiple definition of `pin_to_gpio_rev3'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:40: first defined here
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:39: multiple definition of `pin_to_gpio_rev2'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:39: first defined here
/usr/bin/ld: rb_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:38: multiple definition of `pin_to_gpio_rev1'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:38: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:42: multiple definition of `gpio_direction'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:42: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:45: multiple definition of `module_setup'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:45: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:44: multiple definition of `setup_error'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:44: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:43: multiple definition of `rpiinfo'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:43: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:41: multiple definition of `pin_to_gpio'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:41: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:40: multiple definition of `pin_to_gpio_rev3'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:40: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:39: multiple definition of `pin_to_gpio_rev2'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:39: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:38: multiple definition of `pin_to_gpio_rev1'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:38: first defined here
/usr/bin/ld: rb_pwm.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:37: multiple definition of `gpio_mode'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:37: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:45: multiple definition of `module_setup'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:45: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:44: multiple definition of `setup_error'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:44: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:43: multiple definition of `rpiinfo'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:43: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:42: multiple definition of `gpio_direction'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:42: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:41: multiple definition of `pin_to_gpio'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:41: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:40: multiple definition of `pin_to_gpio_rev3'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:40: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:39: multiple definition of `pin_to_gpio_rev2'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:39: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:38: multiple definition of `pin_to_gpio_rev1'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:38: first defined here
/usr/bin/ld: rpi_gpio.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:37: multiple definition of `gpio_mode'; common.o:/home/g/Public/software/rpi_gpio/ext/rpi_gpio/common.h:37: first defined here
collect2: error: ld returned 1 exit status
make: *** [Makefile:262: rpi_gpio.so] Error 1

@chris-clifton
Copy link

Specifying the git repo did it for me and it correctly compiled as 64 bit.

  1. Delete Gemfile.lock
  2. Change Gemfile to read: gem 'rpi_gpio', git: '[email protected]:ClockVapor/rpi_gpio.git'
  3. Run bundle install

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants