查看: 7540|回复: 2

[教程] 解决树莓派新内核无法使用18B20和没有声音的问题

[复制链接]
  • TA的每日心情
    开心
    2019-6-25 09:54
  • 签到天数: 216 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-1-27 01:54:21 | 显示全部楼层 |阅读模式
    分享到:
    现在新版的树莓派内核由于为了兼容树莓派2和树莓派B+等以前的版本,采用了和原来不同的内核运行方式,使用了设备树的方式,更加灵活。但是由于可能不习惯这样的方式以及没太多相关这方面的介绍,导致很多用户更新了内核后出现比如接18B20无法读取设备信息,以及树莓派没有声音输出的问题。
    在这里细心的用户就会发现在新内核boot分区下多了个overlays文件夹,里面有很多dtb文件,这些其实就是树莓派的设备树,打开README,就可以知道该怎么使用了。
    QQ截图20160127015334.png
    下面是来自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



    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-3-28 17:24
  • 签到天数: 276 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2016-1-27 08:06:18 | 显示全部楼层
    不错            之前看到你在群里问       现在解决了        又分享出来     感谢         
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-6-25 09:54
  • 签到天数: 216 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2016-1-27 13:20:29 | 显示全部楼层
    #define 发表于 2016-1-27 08:06
    不错            之前看到你在群里问       现在解决了        又分享出来     感谢          ...

    o(︶︿︶)o 唉没办法,问了几个群都没人回答,求人不如求己……
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则



    手机版|小黑屋|与非网

    GMT+8, 2024-4-24 04:25 , Processed in 0.118727 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.