树莓派 -- bcm2835 library (1)

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.



posted @ 2018-06-23 11:01  feiwatson  阅读(715)  评论(0编辑  收藏  举报