分类存档: Tech/技术-Archlinux

提高RaspPi 2树莓派音质

RaspPi 2在archlinux下播放音乐音质很糟糕,丝丝作响,网上搜了下,一个比较简单的提高方法是使用在/boot/config文件中加入

audio_pwm_mode=2

测试下,有所提升。

Raspberry pi3树莓派3,Archlinux系统下安装spi液晶屏幕,使用fbtft驱动显示

买了一块ili9341芯片的2.8寸的320x240的spi液晶屏幕,打算连接树莓派玩玩,主要步骤参考了fbtft的说明,参见https://github.com/notro/fbtft/wiki

首先打开树莓派的spi接口:

在/boot/config.txt中加入

dtparam=spi=on

然后连线,LCD屏幕的的MOSI,CLK连接树莓派的spi对应gpio,LCD的RESET连接gpio25,LCD的DC连接gpio24。上电开机,运行

modprobe fbtft_device name=tm022hdh26 rotate=90 fps=15

其中rotate=90是让屏幕旋转90度,fps是帧率

使用

FRAMEBUFFER=/dev/fb1 startx

启动X桌面,我不用X桌面,所以没实验桌面显示效果,我基本只使用控制台。

树莓派的Archlinux我没搞定yaourt,所以没有con2fbmap,只好到Archlinux的官网直接下载了con2fbmap

参见地址:https://aur.archlinux.org/packages/con2fbmap/

需要用git

git clone https://aur.archlinux.org/con2fbmap.git

然后

cd con2fbmap

makepkg

pacman -U con2fbmap-XXXX.pkg.tar.xz

就安装好了con2fbmap

然后使用con2fbmap将控制台1映射到/dev/fb1显示(modprobe fbtft_device后会多出/dev/fb1这个设备),使用命令

con2fbmap 1 1

这时候就会在spi LCD上显示出图像了。当然除了con2fbmap也可以使用fbcp,直接将fb0上的图像复制到fb1上。

为了方便可以做一个脚本:

#!/bin/bash

modprobe fbtft dma

sleep 1

modprobe fbtft_device name=tm022hdh26 rotate=90 fps=15

sleep3

con2fbmap 4 1

clear

然后使用systemd每次开机自动运行。

Archlinux下运行自定义脚本

使用systemd完成自定义脚本的自动运行
在/etc/systemd/system下建立一个服务文件,如myscript.service,加入如下内容
[Unit]
Description=My script

[Service]
ExecStart=/usr/bin/myscript#你的脚本

[Install]
WantedBy=multi-user.target
然后运行如下命令:
chmod 755 /usr/bin/myscript
systemctl enable myscript.service
注意,脚本要以

#!/bin/bash

开头

Raspberry pi上Archlinux的一些设置

Bluetooth蓝牙设置

安装bluez和bluez-utils

安装后systemctrl enable bluetooth.service重启

运行bluetoothctrl

agent on

default-agent

scan on

pair XX:XX:XX:XX:XX:XX

如果是键盘可能需要connect XX:XX:XX:XX:XX:XX

启动uart串口端口

树莓派安装archlinux后,默认uart端口是关闭的,需要打开的话,可以在

/boot/config.txt加入

enable_uart=1
另外

/boot/cmdline.txt中要去掉

和ttyAMA0相关的选项

这时候重新启动会发现多了/dev/ttyS0这个设备

另外需要注意,pi3中蓝牙和uart共用了gpio,在/boot/config.txt中加入

dtoverlay=pi3-disable-bt

可以禁用蓝牙,并记得用systemctl disable hciuart关闭蓝牙服务,这样gpio就只供给uart使用了

SPI接口启用

/boot/config.txt加入

dtparam=spi=on

声音启用

/boot/config加入

dtparam=audio=on

 

备忘:ArchLinux下双网卡Nat共享上网

Archlinux 4.8.4-1-ARCH下测试成功

安装Archlinux电脑有两块网卡,无线网卡(wlp3s0)可以上网,有线网卡(enp12s0)连接一个集线器构成局域网,目的是让局域网上的其他电脑可以共享wlp3s0的网络上网。

有线网卡(enp12s0)ip地址设置为10.10.10.211,局域网上的其他电脑的ip设置为10.10.10.X(同网段),且网关设置为10.10.10.211,DNS就用8.8.8.8吧,其他DNS也可以使用。

下面是运行的命令行设置:ifconfig enp12s0 10.10.10.211  #设置有线网卡ip
echo "1" > /proc/sys/net/ipv4/ip_forward   #打开转发模式,其他版本的LINUX可能此处文件位置稍有不同
iptables -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -o wlp3s0 -j MASQUERADE   #用有线网卡NAT

Archlinux下使用abs安装自己配置的dwm

一直使用dwm,自己配制的功能键用习惯了,所以在arch下也要用自己配制的dwm

首先,abs community/dwm下载dwm源代码,

默认保存在/var/abs/community/dwm-x.x目录下,

在该目录下,解压dwm-x.x.tar.gz文件,修改代码,然后将修改后的代码压缩成dwm-x.x.tar.gz,运行makepkg -f --skipchecksums编译成安装包dwm-x.x-x.pkg.tar.xz

运行pacman -U dwm-x.x-x.pkg.tar.xz安装修改后的dwm就可以了

Archlinux下使用mplayer中的mencoder进行摄像头视频和声音录制

Archlinux 4.2.2-1版本下使用无问题。

使用命令:

mencoder tv:// -tv driver=v4l2:device=/dev/video0:norm=PAL:alsa:adevice=hw.0,0:amode=1:audiorate=4800:forceaudio:volume=100:immediatemode=0:normid=8:input=1:buffersize=1024:width=768:height=576:outfmt=i420 -oac mp3lame -lameopts fast:preset=standard -ovc lavc -o test.avi

这个命令太长了,主要是设置了很多参数,简化以下的版本:

mencoder tv:// -tv driver=v4l2:device=/dev/video0:alsa:adevice=hw.0,0:forceaudio:width=640:height=480 -ovc lavc -oac mp3lame -o test.avi

其中hw.0,0这个参数要运行命令

cat /proc/asound/device

看看capture对应的中括号里对应的数字来决定。

 

 

Archlinux Broadcom BCM4314无线网卡驱动的安装

Archlinux 内核4.2.2版本,下面把我的经历絮絮叨叨的简述一遍吧:

yaourt -Syu完成升级后,笔记本联想IBM E430C,无线网卡broadcom BCM4314,用yaourt -S broadcom-wl编译broadcom无线网卡驱动结果编译出现错误,某个函数参数不对,懒得看源代码,想起来我有个旧的intel的无线网卡,linux下驱动支持良好,于是拆开电脑替换掉broadcom的无线网卡后发现笔记本开不了机,主板BIOS报错,说安装的无线网卡非法,必须装BIOS认为合法无线网卡的才行,也就是说联说哪个无线网卡可以那个无线网卡才可以装上去使用,这是联想故意弄的,一点开源精神都没有,在此强烈鄙视一下联想公司这中下三滥的做法,以后不会再买联想的东西了。

于是只好换回broadcom无线网卡,想办法弄驱动吧,换个其他驱动,用yaorut -S broadcom-wl-ck编译ck版本驱动,但需要安装kernel-ck,编译也没成功。

最后,从broadcom官网www.broadcom.com/support/802.11/linux_sta.php 找到了驱动,可惜没有BCM4314,就用BCM4313试试看吧,下载下来,tar -xvzf 解压缩,make编译,然后把wl.ko用gzip压缩成wl.ko.gz,并复制到/lib/module/extra-archlinux-4.2.2-1/kernel/net/wireless目录下,然后运行depmod,然后modprobe wl后用wifi-menu就可以上网了,不过出现一个重大问题,连网后可以ping通,但是打来浏览器一上网就死机,有空再看看怎么回事吧。

有了点时间,又折腾了一下无线网卡,yaourt  -Syu更新系统后,内核仍然是4.2.2-1,成功安装了broadcom-wl-dkms,可以连接网络,ping通,不过一上网就死机。

没办法,只好找到一个usb无线网卡,先用着吧,坐等大牛弄好broadcom驱动吧。

 

Opencv的opencv_haartraining和opencv_traincascade训练

网上一大堆Opencv的opencv_haartraining和opencv_traincascade训练教程,我试着用了一下,别人的经验多少有些问题,我把我的使用经验和大家分享一下。我的环境如下:

操作系统:Archlinux 4.1.3-1,Opencv版本:2.4.11-1

1.训练先要准备正样本和负样本。

正样本就是要识别的目标图像了,我是手动一个一个的抠出来的,长宽大致相同就可以了,我把正样本存在/home/foo/pos目录下,一共140个文件。负样本就是不含目标的图像,我的负样本保存在/home/foo/neg目录下,一共900个。网上有人说图像文件名称最好是普通的名称复杂的汉字或者符号有可能opencv识别不了,我乖乖的起了很简单的文件名。此外还要准备正、负样本的清单。

/home/foo/pos/posdata.txt文件是正样本文件清单,手动建立该文件,格式如下

1.jpg 1 0 0 200 199

2.jpg 1 0 0 180 190

其中1.jpg是正样本文件名,1是图像中目标个数,0,0 是目标在图像中的左上角,200,199是目标在图像中的右下角。手动添加很累,我是做了个小程序自动生成的。

/home/foo/neg/negdata.txt文件是负样本文件清单,手动建立该文件,格式如下

1.jpg

2.jpg

其中1.jpg是负样本文件名

2.生成vec文件。

准备好样本图像需要使用opencv_createsamples生成.vec文件,就是将这个样本图像进行大小之类的调整,加速训练过程。vec文件生成命令如下:

opencv_createsamples -info pos/posdata.txt  -bg neg/negdata.txt -num 140 -w 24 -h 24 -vec myvec_24.vec

在/home/foo目录下运行该命令,运行后/home/foo目录下会出现myvec_24.vec文件。

-info pos/posdata.txt是指定正样本清单为pos/posdata.txt

-bg neg/negdata.txt是指定负样本清单为neg/negdata.txt

-num 140是指定正样本图像个数为140个

-w 24 -h 24是指将正样本尺寸转换为宽24x高24大小,如果样本过大那么训练过程会很慢的

-vec myvec_24.vec指定vec文件名称为myvec_24.vec

3.使用opencv_traincascade训练

在/home/foo目录下使用命令

opencv_traincascade -data tmp -vec myvec_24.vec -bg neg/negdata.txt -numPos 140 -numNeg 900 -numStages 20 -w 24 -h 24 -featureType HOG

进行训练。其中

-data tmp是指定训练结果存放的目录为tmp,tmp目录要事先建立。

-vec myvec_24.vec是指定vec文件为myvec_24.vec

-bg neg/negdata.txt是指定负样本清单为neg/negdata.txt

-numPos 140是指定正样本数目为140

-numNeg 900是指定负样本数目为900

-numStages 20指定训练阶数为20,太大会很慢

-w 24 -h 24 样本的尺寸,应和生成vec文件时的参数-w -h一致

-featureType HOG使用HOG特征,其他几个参数我实验了,不能用,报错,只有这个能用

然后就是等待了,会出现HR击中率,FA虚警率等信息

训练完成后会有一个xml文件,保存训练结果,不过我虽然训练成功了,但这个文件我用程序加载不上,加载报错。

3.使用opencv_haartraining训练

由于使用opencv_traincascade训练的结果无法加载,我没兴趣查找这个原因了,于是我用老的opencv_haartraining进行训练,训练的结果可以加载使用。

在/home/foo/下运行

opencv_haartraining -data tmp -vec myvec_24.vec -w 24 -h 24 -bg neg/negdata.txt  -nstages 20 -npos 140 -nneg 900

其中

-data tmp是指定中间结果存放的目录为tmp,该目录要提前建立

-nstages 20指定训练阶数为20,太大会很慢

-npos 140 指定正样本数目为140

-nneg 900指定负样本数目为900

漫长等待后,/home/foo目录下会出现一个xml文件,用这个文件就可以进行识别了。

 

 

 

备忘:Archlinux yaourt, curl error: Couldn't connect to server解决方法

使用archlinuxyaourt的时候总出现 curl error: Couldn't connect to server的提示,网上方法是在/etc/hosts里面加上一行:

78.46.8.247   aur.archlinux.org

但是我实验了还是不行,继续搜索后有人说加入

5.9.250.164  aur.archlinux.org

实验成功。据说是DNS把aur.archlinux.org的IP弄错了。

第 1 页,共 6 页12345...最旧 »