树莓派 -- bcm2835 library (1)

匿名 (未验证) 提交于 2019-12-03 00:33:02

bcm2835 library提供了user space 操作IO的代码。

本文不涉及代码分析,先直观的按照user guide完成操作。

1. 在Raspberry中安装bcm2835 library

2. build LED test

3. run led test


  • 从http://www.airspayce.com/mikem/bcm2835/ 下载library库,可以直接在树莓派中下载或者宿主机上下载后sftp传给树莓派,
  • 解压缩
pi@raspberrypi:~ $ tar zxvf bcm2835-1.56.tar.gz  bcm2835-1.56/ bcm2835-1.56/configure.ac bcm2835-1.56/COPYING bcm2835-1.56/examples/ bcm2835-1.56/examples/spi/ bcm2835-1.56/examples/spi/spi.c bcm2835-1.56/examples/input/ bcm2835-1.56/examples/input/input.c bcm2835-1.56/examples/event/ bcm2835-1.56/examples/event/event.c bcm2835-1.56/examples/pwm/ bcm2835-1.56/examples/pwm/pwm.c bcm2835-1.56/examples/gpio/ bcm2835-1.56/examples/gpio/gpio.c bcm2835-1.56/examples/blink/ bcm2835-1.56/examples/blink/blink.c bcm2835-1.56/examples/spin/ bcm2835-1.56/examples/spin/spin.c bcm2835-1.56/examples/i2c/ bcm2835-1.56/examples/i2c/i2c.c bcm2835-1.56/config.guess bcm2835-1.56/NEWS bcm2835-1.56/depcomp bcm2835-1.56/configure bcm2835-1.56/aclocal.m4 bcm2835-1.56/compile bcm2835-1.56/INSTALL bcm2835-1.56/Makefile.in bcm2835-1.56/missing bcm2835-1.56/config.sub bcm2835-1.56/Makefile.am bcm2835-1.56/ChangeLog bcm2835-1.56/README bcm2835-1.56/install-sh bcm2835-1.56/config.h.in bcm2835-1.56/src/ bcm2835-1.56/src/test.c bcm2835-1.56/src/bcm2835.h bcm2835-1.56/src/bcm2835.c bcm2835-1.56/src/Makefile.in bcm2835-1.56/src/Makefile.am bcm2835-1.56/ltmain.sh bcm2835-1.56/AUTHORS bcm2835-1.56/doc/ bcm2835-1.56/doc/Doxyfile.in bcm2835-1.56/doc/Makefile.in bcm2835-1.56/doc/Makefile.am bcm2835-1.56/test-driver

  • ./configure
pi@raspberrypi:~/bcm2835-1.56 $ ls aclocal.m4  ChangeLog  config.guess  config.sub  configure.ac  depcomp  examples  install-sh  Makefile.am  missing  README  test-driver AUTHORS     compile    config.h.in   configure   COPYING       doc      INSTALL   ltmain.sh   Makefile.in  NEWS     src pi@raspberrypi:~/bcm2835-1.56 $ ./configure checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for style of include used by make... GNU checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables...  checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking whether gcc understands -c and -o together... yes checking dependency style of gcc... gcc3 checking for clock_gettime in -lrt... yes checking for doxygen... no configure: WARNING: Doxygen not found - continuing without Doxygen support checking for ranlib... ranlib checking for gcc... (cached) gcc checking whether we are using the GNU C compiler... (cached) yes checking whether gcc accepts -g... (cached) yes checking for gcc option to accept ISO C89... (cached) none needed checking whether gcc understands -c and -o together... (cached) yes checking dependency style of gcc... (cached) gcc3 checking that generated files are newer than configure... done configure: creating ./config.status config.status: creating Makefile config.status: creating src/Makefile config.status: creating doc/Makefile config.status: creating config.h config.status: executing depfiles commands  
  • make
pi@raspberrypi:~/bcm2835-1.56 $ make make  all-recursive make[1]: Entering directory '/home/pi/bcm2835-1.56' Making all in src make[2]: Entering directory '/home/pi/bcm2835-1.56/src' gcc -DHAVE_CONFIG_H -I. -I..     -g -O2 -MT bcm2835.o -MD -MP -MF .deps/bcm2835.Tpo -c -o bcm2835.o bcm2835.c mv -f .deps/bcm2835.Tpo .deps/bcm2835.Po rm -f libbcm2835.a ar cru libbcm2835.a bcm2835.o  ar: `u' modifier ignored since `D' is the default (see `U') ranlib libbcm2835.a make[2]: Leaving directory '/home/pi/bcm2835-1.56/src' Making all in doc make[2]: Entering directory '/home/pi/bcm2835-1.56/doc' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/home/pi/bcm2835-1.56/doc' make[2]: Entering directory '/home/pi/bcm2835-1.56' make[2]: Leaving directory '/home/pi/bcm2835-1.56' make[1]: Leaving directory '/home/pi/bcm2835-1.56' pi@raspberrypi:~/bcm2835-1.56 $ sudo make check Making check in src make[1]: Entering directory '/home/pi/bcm2835-1.56/src' make  test make[2]: Entering directory '/home/pi/bcm2835-1.56/src' gcc -DHAVE_CONFIG_H -I. -I..     -g -O2 -MT test.o -MD -MP -MF .deps/test.Tpo -c -o test.o test.c mv -f .deps/test.Tpo .deps/test.Po gcc  -g -O2   -o test test.o ./libbcm2835.a -lrt  make[2]: Leaving directory '/home/pi/bcm2835-1.56/src' make  check-TESTS make[2]: Entering directory '/home/pi/bcm2835-1.56/src' make[3]: Entering directory '/home/pi/bcm2835-1.56/src' PASS: test ============================================================================ Testsuite summary for bcm2835 1.56 ============================================================================ # TOTAL: 1 # PASS:  1 # SKIP:  0 # XFAIL: 0 # FAIL:  0 # XPASS: 0 # ERROR: 0 ============================================================================ make[3]: Leaving directory '/home/pi/bcm2835-1.56/src' make[2]: Leaving directory '/home/pi/bcm2835-1.56/src' make[1]: Leaving directory '/home/pi/bcm2835-1.56/src' Making check in doc make[1]: Entering directory '/home/pi/bcm2835-1.56/doc' make[1]: Nothing to be done for 'check'. make[1]: Leaving directory '/home/pi/bcm2835-1.56/doc' make[1]: Entering directory '/home/pi/bcm2835-1.56' make[1]: Leaving directory '/home/pi/bcm2835-1.56'  

  • sudo make install
pi@raspberrypi:~/bcm2835-1.56 $ sudo make install Making install in src make[1]: Entering directory '/home/pi/bcm2835-1.56/src' make[2]: Entering directory '/home/pi/bcm2835-1.56/src'  /bin/mkdir -p '/usr/local/lib'  /usr/bin/install -c -m 644  libbcm2835.a '/usr/local/lib'  ( cd '/usr/local/lib' && ranlib libbcm2835.a )  /bin/mkdir -p '/usr/local/include'  /usr/bin/install -c -m 644 bcm2835.h '/usr/local/include' make[2]: Leaving directory '/home/pi/bcm2835-1.56/src' make[1]: Leaving directory '/home/pi/bcm2835-1.56/src' Making install in doc make[1]: Entering directory '/home/pi/bcm2835-1.56/doc' make[2]: Entering directory '/home/pi/bcm2835-1.56/doc' make[2]: Nothing to be done for 'install-exec-am'. make[2]: Nothing to be done for 'install-data-am'. make[2]: Leaving directory '/home/pi/bcm2835-1.56/doc' make[1]: Leaving directory '/home/pi/bcm2835-1.56/doc' make[1]: Entering directory '/home/pi/bcm2835-1.56' make[2]: Entering directory '/home/pi/bcm2835-1.56' make[2]: Nothing to be done for 'install-exec-am'. make[2]: Nothing to be done for 'install-data-am'. make[2]: Leaving directory '/home/pi/bcm2835-1.56' make[1]: Leaving directory '/home/pi/bcm2835-1.56' pi@raspberrypi:~/bcm2835-1.56 $ 

  • build LED test 并执行
pi@raspberrypi:~/Pioneer600 $ cd LED/ pi@raspberrypi:~/Pioneer600/LED $ ls bcm2835  fs  python  shell  wiringPi pi@raspberrypi:~/Pioneer600/LED $ cd bcm2835/ pi@raspberrypi:~/Pioneer600/LED/bcm2835 $ ls led  led.c  Makefile pi@raspberrypi:~/Pioneer600/LED/bcm2835 $ make make: 'led' is up to date. pi@raspberrypi:~/Pioneer600/LED/bcm2835 $ ./led bcm2835_init: Unable to open /dev/mem: Permission denied pi@raspberrypi:~/Pioneer600/LED/bcm2835 $ sudo ./led

LED代码

/* LED.c  * you can build this with something like:  * gcc -Wall blink.c -o blink -lbcm2835  * sudo ./blink */ #include <bcm2835.h>  #define PIN 26 int main(int argc, char **argv) {     if (!bcm2835_init())return 1;     bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);      while (1)     {         bcm2835_gpio_write(PIN, HIGH);         bcm2835_delay(500);         bcm2835_gpio_write(PIN, LOW);         bcm2835_delay(500);     }     bcm2835_close();     return 0; }
可以看到LED blink.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!