zoukankan      html  css  js  c++  java
  • 解决树莓派新内核无法使用18B20和没有声音的问题

    现在新版的树莓派内核由于为了兼容树莓派2和树莓派B+等以前的版本,采用了和原来不同的内核运行方式,使用了设备树的方式,更加灵活。但是由于可能不习惯这样的方式以及没太多相关这方面的介绍,导致很多用户更新了内核后出现比如接18B20无法读取设备信息,以及树莓派没有声音输出的问题。
    在这里细心的用户就会发现在新内核boot分区下多了个overlays文件夹,里面有很多dtb文件,这些其实就是树莓派的设备树,打开README,就可以知道该怎么使用了。

    1

    下面是来自README的话:

    Introduction
    ============
    This directory contains Device Tree overlays. Device Tree makes it possible
    to support many hardware configurations with a single kernel and without the
    need to explicitly load or blacklist kernel modules. Note that this isn't a
    "pure" Device Tree configuration (c.f. MACH_BCM2835) - some on-board devices
    are still configured by the board support code, but the intention is to
    eventually reach that goal.
    On Raspberry Pi, Device Tree usage is controlled from /boot/config.txt. By
    default, the Raspberry Pi kernel boots with device tree enabled. You can
    completely disable DT usage (for now) by adding:
        device_tree=
    to your config.txt, which should cause your Pi to revert to the old way of
    doing things after a reboot.

    如果要禁用设备树就直接在boot/config.txt里写device_tree=然后保存重启即可。
    那么我们要怎么使用设备树呢?就拿启用W1来读取18B20数据来说,Readme里有这样一段:

    Using Overlays
    ==============
    Overlays are loaded using the "dtoverlay" directive. As an example, consider the
    popular lirc-rpi module, the Linux Infrared Remote Control driver. In the
    pre-DT world this would be loaded from /etc/modules, with an explicit
    "modprobe lirc-rpi" command, or programmatically by lircd. With DT enabled,
    this becomes a line in config.txt:
        dtoverlay=lirc-rpi
    This causes the file /boot/overlays/lirc-rpi-overlay.dtb to be loaded. By
    default it will use GPIOs 17 (out) and 18 (in), but this can be modified using
    DT parameters:
        dtoverlay=lirc-rpi,gpio_out_pin=17,gpio_in_pin=13
    Parameters always have default values, although in some cases (e.g. "w1-gpio")
    it is necessary to provided multiple overlays in order to get the desired
    behaviour. See the list of overlays below for a description of the parameters and their defaults.

    也就是说,在使用config.txt里添加dtoverlay=【设备树名】来启动设备树,同样也可以在这里指定加载的设备树参数,实际上这个操作就和之前的内核在系统里添加模块类似,只不过这里是在内核启动的时候加载,之前的是在系统启动后加载。
    那么我们就可以照搬添加w1到config.txt里面然后重启读取18B20了,Readme里也有相关参数说明:

    Name:   w1-gpio
    Info:   Configures the w1-gpio Onewire interface module.
            Use this overlay if you *don't* need a GPIO to drive an external pullup.
    Load:   dtoverlay=w1-gpio,<param>=<val>
    Params: gpiopin                  GPIO for I/O (default "4")
            pullup                   Non-zero, "on", or "y" to enable the parasitic
                                     power (2-wire, power-on-data) feature
    Name:   w1-gpio-pullup
    Info:   Configures the w1-gpio Onewire interface module.
            Use this overlay if you *do* need a GPIO to drive an external pullup.
    Load:   dtoverlay=w1-gpio-pullup,<param>=<val>,...
    Params: gpiopin                  GPIO for I/O (default "4")
            pullup                   Non-zero, "on", or "y" to enable the parasitic
                                     power (2-wire, power-on-data) feature
            extpullup                GPIO for external pullup (default "5")

    这里提供了更多的参数进行选择,如果你打算采用寄生的连接方式这里也提供了参数实现内部上拉,当然如果你想保留原来的连接电路方式不进行电路改动的话那么我们就这样设置好了:
    在config.txt里插入下面的内容:
    dtoverlay=w1-gpio-pullup,gpiopin=4
    这样就可以按照原来的电路连接方式连接18B20,保存重启后一样的载入w1-gpio和w1-therm后就可以读取到18B20数据了。
    如果你要启用树莓派的音频的话,在里面添加一行
    audio=on即可,新版的内核禁用了audio的原因是因为树莓派PWM和audio使用的是同一个接口,可能介于很多人希望使用树莓派的硬件PWM的原因,所以才这样灵活的设计让大家有更多自由使用的空间。
    Readme关于audio和pwm的原文:

    he Overlay and Parameter Reference
    ===================================
    N.B. When editing this file, please preserve the indentation levels to make it simple to parse
    programmatically. NO HARD TABS.
    Name:   <The base DTB>
    Info:   Configures the base Raspberry Pi hardware
    Load:   <loaded automatically>
    Params:
            audio                    Set to "on" to enable the onboard ALSA audio
                                     interface (default "off")

    ====================

    Name:   pwm
    Info:   Configures a single PWM channel
            Legal pin,function combinations for each channel:
              PWM0: 12,4(Alt0) 18,2(Alt5) 40,4(Alt0)            52,5(Alt1)
              PWM1: 13,4(Alt0) 19,2(Alt5) 41,4(Alt0) 45,4(Alt0) 53,5(Alt1)
            N.B.:
              1) Pin 18 is the only one available on all platforms, and
                 it is the one used by the I2S audio interface.
                 Pins 12 and 13 might be better choices on an A+, B+ or Pi2.
              2) The onboard analogue audio output uses both PWM channels.
              3) So be careful mixing audio and PWM.
              4) Currently the clock must have been enabled and configured
                 by other means.
    Load:   dtoverlay=pwm-2chan,<param>=<val>
    Load:   dtoverlay=pwm,<param>=<val>
    Params: pin                      Output pin (default 18) - see table
            func                     Pin function (default 2 = Alt5) - see above
            clock                    PWM clock frequency (informational)
    Name:   pwm-2chan
    Info:   Configures both PWM channels
            Legal pin,function combinations for each channel:
              PWM0: 12,4(Alt0) 18,2(Alt5) 40,4(Alt0)            52,5(Alt1)
              PWM1: 13,4(Alt0) 19,2(Alt5) 41,4(Alt0) 45,4(Alt0) 53,5(Alt1)
            N.B.:
              1) Pin 18 is the only one available on all platforms, and
                 it is the one used by the I2S audio interface.
                 Pins 12 and 13 might be better choices on an A+, B+ or Pi2.
              2) The onboard analogue audio output uses both PWM channels.
              3) So be careful mixing audio and PWM.
              4) Currently the clock must have been enabled and configured
                 by other means.
    Load:   dtoverlay=pwm-2chan,<param>=<val>
    Params: pin                      Output pin (default 18) - see table
            pin2                     Output pin for other channel (default 19)
            func                     Pin function (default 2 = Alt5) - see above
            func2                    Function for pin2 (default 2 = Alt5)
            clock                    PWM clock frequency (informational)

    更多信息大家自己去阅读/boot/overlays/README

  • 相关阅读:
    内置函数,闭包。装饰器初识
    生成器
    百度ai 接口调用
    迭代器
    HashMap与ConcurrentHashMap的测试报告
    ConcurrentHashMap原理分析
    centos 5.3 安装(samba 3.4.4)
    什么是shell? bash和shell有什么关系?
    Linux中使用export命令设置环境变量
    profile bashrc bash_profile之间的区别和联系
  • 原文地址:https://www.cnblogs.com/chjbbs/p/5514406.html
Copyright © 2011-2022 走看看