Yaourt 全称 Yet Another User Repository Tool 用户的另一个软件仓库管理工具,是玩 Archlinux 必备的工具, 之前一直没有好好总结下该如何安装,因为之前的wiki有简单的安装步骤足够用,但是貌似现在找不到了,那就只能从 makepkg 一步一步去安装了。

  • 首先,安装基础开发环境, base-devel 主要提供了编译环境
# pacman -S base-devel
  • 安装 yajl
# pacman -S yajl
  • 安装 package-query,

    注意:使用 makepkg 的时候,要用非root用户; 去 https://aur.archlinux.org/packages/ 找需要的 PKGBUILD

$ wget https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=package-query -O PKGBUILD

$ makepkg

$ sudo pacman -U package-query-1.8-2-armv7h.pkg.tar.xz
  • 安装 yaourt,
$ wget https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=yaourt -O PKGBUILD

$ makepkg

$ sudo pacman -U yaourt-1.8.1-1-any.pkg.tar.xz

表示这次买的树莓派3的坑太多了,蓝牙在Arch下都找不到,最终在论坛搜到了一篇帖子

That too, is not yet finished by the people at the Pi Foundation.

原来基金会的人还没有彻底开发完。。。。WTF。。。。

不过好在有国外网友自己根据 Raspbian 下的包,做了个 Arch 下面的。不过是放在了Aur上, 需要用 yaourt 来安装下,这就好办了,这是原贴

注意:是在非root下执行的
$ yaourt -S pi-bluetooth
$ sudo systemctl enable brcm43438.service
$ sudo reboot

重启后,可以看到已经启动成功了,

[ety001@docker ~]$ sudo systemctl status brcm43438.service
[sudo] password for ety001:
* brcm43438.service - Broadcom BCM43438 bluetooth HCI
   Loaded: loaded (/usr/lib/systemd/system/brcm43438.service; enabled; vendor pr
   Active: active (running) since Wed 2016-05-11 15:53:51 UTC; 1min 9s ago
 Main PID: 273 (hciattach-rpi3)
    Tasks: 1 (limit: 512)
   CGroup: /system.slice/brcm43438.service
           `-273 /usr/bin/hciattach-rpi3 -n /dev/ttyAMA0 bcm43xx 921600 noflow -

May 11 15:53:51 docker systemd[1]: Started Broadcom BCM43438 bluetooth HCI.

接下来安装管理工具

$ sudo pacman -S bluez bluez-utils

加载mod

[root@docker ~]# modprobe btusb

启动设备

[root@docker ~]# hciconfig hci0 up

增加配置,可以让设备开机自启动

[root@docker ~]# cat /etc/udev/rules.d/10-local.rules
# Set bluetooth power up
ACTION=="add", KERNEL=="hci0", RUN+="/usr/bin/hciconfig hci0 up"
 cat /etc/systemd/system/bluetooth-auto-power@.service
[Unit]
Description=Bluetooth auto power on
After=bluetooth.service sys-subsystem-bluetooth-devices-%i.device suspend.target

[Service]
Type=oneshot
ExecStartPre=/usr/bin/sleep 1
ExecStart=/usr/bin/dbus-send --system --type=method_call --dest=org.bluez /org/bluez/%I org.freedesktop.DBus.Properties.Set string:org.bluez.Adapter1 string:Powered variant:boolean:true

[Install]
WantedBy=suspend.target
[root@docker ~]# systemctl enable bluetooth
[root@docker ~]# systemctl enable bluetooth-auto-power@hci0.service
[root@docker ~]# reboot

重启后,执行 bluetoothctl

[root@docker ~]# bluetoothctl
[NEW] Controller B8:27:EB:B7:AF:FA docker [default]
[NEW] Device 0C:FC:85:B0:08:78 Bluetooth Keyboard
[bluetooth]#

开始配对

[bluetooth]# agent on
Agent registered
[bluetooth]# default-agent
Default agent request successful
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:B7:AF:FA Discovering: yes
[NEW] Device 5F:7A:78:E1:2A:0B 5F-7A-78-E1-2A-0B
[bluetooth]# scan on
Failed to start discovery: org.bluez.Error.InProgress
[CHG] Device 0C:FC:85:B0:08:78 RSSI: -54
[bluetooth]# pair 0C:FC:85:B0:08:78
Attempting to pair with 0C:FC:85:B0:08:78
[CHG] Device 0C:FC:85:B0:08:78 Connected: yes
[agent] PIN code: 547945
[CHG] Device 0C:FC:85:B0:08:78 Connected: no
[CHG] Device 0C:FC:85:B0:08:78 Connected: yes
[CHG] Device 0C:FC:85:B0:08:78 Connected: no
[CHG] Device 0C:FC:85:B0:08:78 Connected: yes
[agent] PIN code: 744661
[CHG] Device 0C:FC:85:B0:08:78 Paired: yes
Pairing successful
[CHG] Device 0C:FC:85:B0:08:78 Connected: no
[bluetooth]# trust 0C:FC:85:B0:08:78
Changing 0C:FC:85:B0:08:78 trust succeeded
[bluetooth]# connect 0C:FC:85:B0:08:78
Attempting to connect to 0C:FC:85:B0:08:78
[CHG] Device 0C:FC:85:B0:08:78 Connected: yes
Connection successful
[Bluetooth Keyboard]#

终于可以使用我的蓝牙键盘了~ 赞赞赞!

新买了树莓派3B,由于树莓派3B是arm v8的64位cpu,所以之前树莓派2B的archlinux包显然是不能用了。

https://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-3#installation 这个页面可以看到,

The current installation uses the 32-bit Raspberry Pi 2 armv7h root filesystem. This will be changing eventually to use our AArch64 repository to take full advantage of the ARMv8 Cortex-A53 cores.

当前只能安装arm v7,v8的还没有。

所以按照该页面的教程操作即可。

注意在下载filesystem的时候,下载下面的这个包

http://archlinuxarm.org/os/ArchLinuxARM-rpi-2-latest.tar.gz

2014年年底的某一天,在家跟来爷通QQ电话讨论项目,发现我的Mac内置麦克风采集不到我说话的声音了。 前一天还是好好的,怎么突然就不能用了呢?刚开始以为可能是某个地方配置出问题了,把麦克风静音了。 但是查看系统配置,没有任何问题,不过有一个很奇怪的现象,就是配置中的电瓶显示能采集到我敲击外壳和键盘的声音。 我又试了几次,并且用录音软件试了下,果然是能录下来敲击键盘和外壳的声音,而说话的声音,必须要极端的大, 才能录制上蚊子的声音。

我在考虑是不是驱动因为当晚安装内录软件有问题了,于是卸载了内录软件,也没有效果,于是放狗开搜。 不要问我为啥不用百度,因为百度根本就屁毛都没有。。

于是搜到了很多麦克风的问题,大家都说到了要重置SMC重置PRAM,但是试过后也是无果。 不过他们跟我遇到的情况也不大一致,直到找到下面这个帖子:

http://forums.macrumors.com/threads/how-i-fixed-my-internal-microphone.410734/

不得不说,关键词的力量,之前一直用click来描述我的问题,换成flick后,就找到了这篇帖子。

这个帖子的楼主看来遇到了和我一样的问题,且时间很早,都是2008年的老帖子了。。。

不过楼主的解决方法很奇葩,就是敲了敲麦克风位置,然后。。。。然后就特么好了。。。

然后楼下好多人都成功了。。。

关键是,我都把手指头快敲断了,毛线效果都没有看到,这是闹哪样,难道是我的姿势不对?

又折腾了一天,于是放弃了。。。

时间回到当下,最近又想折腾下我的麦克风了(突然想到了一句歌:是谁抢走了我的麦克风。。。),于是继续google。

这次巧合的是,我又找到了当年的那个帖子,抱着侥幸的心理,又当当当的敲到手疼。。。。。然并卵。。。

不过我又找到了下面的一个帖子:

http://apple.stackexchange.com/questions/90123/internal-mic-stopped-recording-voice-but-hears-case-keyboard-touching

其中有人说到,用针戳一戳就好了。。。话说我当时也想到了这个问题,但是我仔细看过了麦克风的孔,很细, 也没有堆积灰尘,至少在肉眼看来是这样的。但是现在也没有办法了,就去找了根很细的针,轻轻的把针尖插入, 也仅仅只是能插入一毫米的针尖。转动了下,拿出来,针头上居然有灰!!!!!!

毫不夸张的说,这个灰的体积也就是1立方毫米!!!

然后我对着麦克风说话,看到配置界面的电瓶居然有反应了!!!!!

立马清理了所有的小孔,然后用Skype测试了下,麦克风终于恢复正常了!!!

真心觉得这个是个Bug,太丧心病狂的Bug了,心里真的是有一万匹草泥马奔驰而过呀。。。

去年下半年花了很久的时间从零开始,然后搞了个土壤湿度检测的东西,成品就是下图的样子:

成品

本计划是想直接把土壤湿度检测装置安装到树莓派上,然后用python之类的脚本语言去采集数据, 并发布到网络收集器上,同时提供低于阈值微信提醒。但是后来才知道,原来树莓派只接收数字信号, 不接受模拟信号,买到的土壤检测装置,如果想要提供具体的值的话,需要采集模拟信号。 对于一个非电子专业的人来说,终于借这个机会大体知道了什么是数电,什么是模电了。

既然没法直接搞,就看看中间加个转换,试了试之前那个不能用的arduino,好吧依旧不能用。 就花钱买了个ADC,结果搞了两个月也没有搞明白该怎么接线,就更不用说怎么写个支持树莓派的驱动了。。

于是重新回过头来研究arduino吧,看看到底能不能修好。最终发现原来是某些烧写配置不对, 重新配置后,烧写测试通过。关于烧写A8M的配置就放在了gist,https://gist.github.com/ety001/d44bd7c770b2d2937cfb

最终就是树莓派通过arduino来读取采集器的数据,并走wifi把数据上报,达到阈值就发微信提醒。 下面的链接就是采集的湿度数据了:

http://www.yeelink.net/devices/343089/#sensor_380664

今天开始就关停这套设备了,因为插入土壤的探测部分,真心的不耐腐蚀。 所以现在经过实验后来看,当下淘宝上卖的类似这样的土壤湿度检测元件, 也就是进行下实验而已,想要长时间使用则是不行的。

长时间使用的话,就像下图的样子了:

长时间使用的土壤检测装置被腐蚀

可以看到PCB板上的金属多部分都已经被腐蚀了,这也是导致有段时间的数据一直为零的原因。 由于我设置了当湿度低于40%就进行微信提醒,每天至多提醒一次,所以那段时间天天都有微信报警。。。 当时还纳闷,是什么原因导致的,后来一个周末,把上图的那个装置从土里拔出来,才知道原来是这样。

于是又更换了新的探测装置——不锈钢小条,结果稳定使用3个月后,又被腐蚀了,

不锈钢都被腐蚀了

可以看到有一根被腐蚀断了。我观察到断的位置是这根不锈钢条插在土里面时,土壤与空气交界的地方以上的部位。 这就引发了新的思考,为啥一根完好无损,另一根就被腐蚀的很严重呢。刚开始以为可能是土壤的问题, 但是后来看了最早的那个原装的探测装置的腐蚀情况,发现腐蚀也是不对称的。

一阳一阴,一正一负,突然间就想到了原来化学课上学过的电解。如果用电解的思路来考虑的话, 就能解释为什么只有一根腐蚀严重了,土壤应该只是提供了潮湿的环境和土壤中的离子,也就是土壤充当了电解质。 由于arduino的电流很微弱,所以化学反应进行的很缓慢。另外腐蚀严重的一端应该就是正极, 这个在拆下来的时候也没有仔细看看。。

总之,就当做是做了个实验吧。