逍遥游

为了小孩多听粤语,想播放以前收音机里面的小说节目,于是做了一个这样的东西, 每天定时大约吃饭时间播放一集节目, 第一季节目就播三国演义把.

垃圾电视盒刷armbian, 接usb 声卡, 一个功放模块,一个控制模块, 三个模块都是自己做了, 控制模块是usb转串口,接一个单片机,控制功放模块的电源, 因为24小时不停待机,因此不播放的时候要休眠状态.
垃圾电视盒是没有IO的,所以有这个东西.

安装所有必须的东西
samba, cifs-utils , 音频文件在nas上,所以要装samba 共享.
stty,控制串口波特率等
sox , 播放mp3的的东西
python, 控制脚本

python 脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/usr/bin/python

import json
import os
import linecache
import sys



filename = 'cur_play_id.json'
list_name = 'play_list'
index=1


os.system('stty -F /dev/ttyUSB0 115200')
os.system ('echo ":9000020101aa\r\n" >> /dev/ttyUSB0')
os.system ('play sanya.mp3')

if len(sys.argv) > 1 :
list_name= sys.argv[1]

print(list_name)



try:

with open (filename) as f_obj:
ja=json.load(f_obj)
index=ja['cur_index']
index = index +1

except FileNotFoundError:
print("index file Not Found!@!!!")
index = 1


try:

play_file = linecache.getline(list_name,index).strip()
if play_file =='' :
print ("end of play list file")
else :
a_cmd = 'play ' + play_file
print(a_cmd)
os.system(a_cmd)
os.system ('echo ":9000020100aa\r\n" >> /dev/ttyUSB0')

except FileNotFoundError:
print ("Play List file not found!!")
os._exit(0)



data_dic = {'cur_index':index}

with open(filename,'w') as f:
json.dump(data_dic,f)

用法就是python play_mp3.py list.txt

生成播放列表文件的脚本

1
ls -1 |awk '{print i$0}' i=`pwd`'/' > list.txt

#设置mac

盒子mac 没有,
直接编辑 /etc/network/interfaces 文件,在 iface eth0 inet static 后面添加一行:
pre-up ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx(要改成的MAC)

1
2
3
4
5
iface eth0 inet static
pre-up ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx(要改成的MAC)
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1

对于wifi 也是一样

另外一种说法 uboot 中设置,不过我试过不行

/boot/uEnv.ini

dtb_name=/dtb/meson-gxl-s905d-phicomm-n1.dtb
bootargs=root=LABEL=ROOT_EMMC rootflags=data=writeback rw console=ttyAML0,115200n8 console=tty0 no_cons…………………..
ethaddr=42:b8:79:09:d8:ed

#设置时区

1
echo "Asia/Shanghai" > /etc/timezone && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#设置语言环境
/etc/environment

1
2
3
ARCH=arm64
LC_ALL="en_US.UTF-8"
LANG="en_US.UTF-8"

数码视讯Q7 的垃圾电视盒30元一个,S905L芯片, A53 x 4 ,1G RAM , 可以跑很多东西,本来想跑一些nas应用,后来猫盘,什么我家云等矿渣也不断出来,就放弃, 现在计划拿来跑AI的一些视频识别应用.

armbian 上面针对S905的都没有rtl8189的驱动,那就自己加

下载virtul box, 在上面跑一个unbutu的虚拟机,这里必须用官方mini.iso来安装.不能用18.4.3 这个官方推荐版本,说来都是泪,说白了就是版本依赖的问题.

下载armbian build脚本,我们用150balbes 针对s905的版本

1
2
3
git clone https://github.com/150balbes/Build-Armbian
cd Build-Armbian
./compile.sh BOARD=aml-g12 BRANCH=default RELEASE=bionic BUILD_MINIMAL=no BUILD_DESKTOP=no KERNEL_ONLY=no KERNEL_CONFIGURE=yes

下面这段话是别人的

1
2
3
4
5
6
7
BOARD 设置为 aml-g12,可以选 aml-s905,但是只有 aml-g12 编译时用的源码是最新的
BRANCH 编译使用的源码分支 在 105 的 build 中,default 使用的是他自己 fork 的 S905 kernel 源码
RELEASE 为需要编译的版本,我这里设置为 Ubuntu 19.04 disco,可以选择 buster bionic stretch xenial 等
BUILD_MINIMAL 是否为最小版本,这个选项改为 yes 之后,没有 armbian-config 了,所以还是把它改为了 no
BUILD_DESKTOP 是否编译桌面版本
KERNEL_ONLY 是否只编译内核
KERNEL_CONFIGURE 是否在开始编译是打开内核配置,这个选项需要设置为 yes,来添加我们需要的 WIFI 驱动

修改 /Build-Armbian/lib/compilation-prepare.sh 脚本

增加下载编译rtl8189的代码
代码在这里 https://github.com/jwrdegoede/rtl8189ES_linux

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Wireless drivers for Realtek 8189ES  chipsets

if linux-version compare $version ge 3.14 && [ "$EXTRAWIFI" == yes ]; then

# attach to specifics tag or branch
local rtl8189es="branch:rtl8189fs" #必须用这个分支

display_alert "Adding" "Wireless drivers for Realtek 8189fs chipsets ${rtl8189es}" "info"

fetch_from_repo "https://github.com/jwrdegoede/rtl8189ES_linux" "rtl8189fs" "${rtl8189es}" "yes"
cd ${SRC}/cache/sources/${LINUXSOURCEDIR}
rm -rf ${SRC}/cache/sources/${LINUXSOURCEDIR}/drivers/net/wireless/rtl8189fs
mkdir -p ${SRC}/cache/sources/${LINUXSOURCEDIR}/drivers/net/wireless/rtl8189fs/
cp -R ${SRC}/cache/sources/rtl8189fs/${rtl8189es#*:}/{core,hal,include,os_dep,platform} \
${SRC}/cache/sources/${LINUXSOURCEDIR}/drivers/net/wireless/rtl8189fs

# Makefile
cp ${SRC}/cache/sources/rtl8189fs/${rtl8189es#*:}/Makefile \
${SRC}/cache/sources/${LINUXSOURCEDIR}/drivers/net/wireless/rtl8189fs/Makefile
cp ${SRC}/cache/sources/rtl8189fs/${rtl8189es#*:}/Kconfig \
${SRC}/cache/sources/${LINUXSOURCEDIR}/drivers/net/wireless/rtl8189fs/Kconfig

# Add to section Makefile
echo "obj-\$(CONFIG_RTL8189FS) += rtl8189fs/" >> $SRC/cache/sources/${LINUXSOURCEDIR}/drivers/net/wireless/Makefile
sed -i '/source "drivers\/net\/wireless\/ti\/Kconfig"/a source "drivers\/net\/wireless\/rtl8189fs\/Kconfig"' \
$SRC/cache/sources/${LINUXSOURCEDIR}/drivers/net/wireless/Kconfig

fi

然后就重新编译就可以, 上面看上去好像很简单,我也搞了几天.

下面这段事别人的, https://blog.csdn.net/jklinux/article/details/78737691

我复制过来, 有时候有用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
通过检查电路原理图,可以发现此wifi芯片是连接到板上mmc1控制器上的。H5共有三个sd/mmc控制器, 而控制器驱动是platform_driver, 需要用platform_device或在设备树里提供硬件控制器的硬件资源.

在H5的设备树sunxi-h3-h5.dtsi文件里,而描述好三个sd/mmc控制器的设备节点:

mmc0: mmc@01c0f000 {
/* compatible and clocks are in per SoC .dtsi file */
reg = <0x01c0f000 0x1000>;
resets = <&ccu RST_BUS_MMC0>;
reset-names = "ahb";
interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
status = "enabled";
#address-cells = <1>;
#size-cells = <0>;
};

mmc1: mmc@01c10000 {
/* compatible and clocks are in per SoC .dtsi file */
reg = <0x01c10000 0x1000>;
resets = <&ccu RST_BUS_MMC1>;
reset-names = "ahb";
interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
status = "enabled";
#address-cells = <1>;
#size-cells = <0>;
};

mmc2: mmc@01c11000 {
/* compatible and clocks are in per SoC .dtsi file */
reg = <0x01c11000 0x1000>;
resets = <&ccu RST_BUS_MMC2>;
reset-names = "ahb";
interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
status = "enabled";
#address-cells = <1>;
#size-cells = <0>;
};

但三个设备节点的status属性值不是”okay”的话,是不会生效的. 而且还需要提供sd/mmc控制器使用的gpio口配置信息.

在设备树文件sun50i-h5-nanopi-neo2.dts里,已提供让mmc0控制器生效的设备节点:

&mmc0 {
pinctrl-names = "default";
pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin>;
vmmc-supply = <&reg_vcc3v3>;
bus-width = <4>;
cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
boot_device = <1>;
status = "okay";
};

所以要想使用mmc1控制器,再增加一个mmc的设备节点即可:

&mmc1 {
pinctrl-names = "default";
pinctrl-0 = <&mmc1_pins_a>;
vmmc-supply = <&reg_vcc3v3>;
bus-width = <4>;
status = "okay";
};

修改完成后更新使用设备树,进入系统后:

//查看到已有两个设备与sd/mmc控制器的驱动匹配上了:
^_^ / # ls /sys/bus/platform/drivers/sunxi-mmc/
1c0f000.mmc/ 1c10000.mmc/ bind uevent unbind

sd/mmc控制器驱动好后,它会自动读取sdio设备的信息,并在系统里创建出相应的sdio设备信息:

这里可以获取到wifi芯片的厂家和设备id, wifi设备驱动里是根据这些id来作匹配的.

^_^ / # cat /sys/bus/sdio/devices/mmc2\:0001\:1/device
0xf179
^_^ / # cat /sys/bus/sdio/devices/mmc2\:0001\:1/vendor
0x024c

通过官网的说明: http://linux-sunxi.org/Wifi#RTL8189FTV
rtl8189ftv型号的wifi用的就是rtl8189ES驱动. 与型号8189fs一致.

下载驱动源码: git clone https://github.com/jwrdegoede/rtl8189ES_linux.git
git checkout -b rtl8189fs origin/rtl8189fs //下载8189fs的分支
git pull //检查更新
1
2
3
4
驱动源码下载后, 可以发现此驱动源码是可以支持很多个型号的wifi芯片.

在驱动源码os_dep/linux/sdio_intf.c文件里, 可以看到匹配用的设备id表:

47 static const struct sdio_device_id sdio_ids[] =
48 {
49 #ifdef CONFIG_RTL8723B
50 { SDIO_DEVICE(0x024c, 0xB723),.driver_data = RTL8723B},
51 #endif
52 #ifdef CONFIG_RTL8188E
53 { SDIO_DEVICE(0x024c, 0x8179),.driver_data = RTL8188E},
54 #endif //CONFIG_RTL8188E
55
56 #ifdef CONFIG_RTL8821A
57 { SDIO_DEVICE(0x024c, 0x8821),.driver_data = RTL8821},
58 #endif //CONFIG_RTL8821A
59
60 #ifdef CONFIG_RTL8192E
61 { SDIO_DEVICE(0x024c, 0x818B),.driver_data = RTL8192E},
62 #endif //CONFIG_RTL8192E
63
64 #ifdef CONFIG_RTL8703B
65 { SDIO_DEVICE(0x024c, 0xB703), .driver_data = RTL8703B},
66 #endif
67
68 #ifdef CONFIG_RTL8188F //rtl8189ftv的厂家和设备id
69 {SDIO_DEVICE(0x024c, 0xF179), .driver_data = RTL8188F},
70 #endif
....

98 static struct sdio_drv_priv sdio_drvpriv = {
99 .r871xs_drv.probe = rtw_drv_init,
100 .r871xs_drv.remove = rtw_dev_remove,
101 .r871xs_drv.name = (char*)DRV_NAME,
102 .r871xs_drv.id_table = sdio_ids,
103 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29))
104 .r871xs_drv.drv = {
105 .pm = &rtw_sdio_pm_ops,
106 }
107 #endif
108 };


具体要编译支持哪个芯片,需要修改里面的Makefile.
//只要作了git checkout … 里面会自动修改支持8189ftv/818fs的.
Makefile里的内容:

38 CONFIG_RTL8188F = y
39 ######################### Interface ###########################
40 CONFIG_USB_HCI = n
41 CONFIG_PCI_HCI = n
42 CONFIG_SDIO_HCI = y

//需要修改的内容:
114 CONFIG_PLATFORM_ARM_SUNxI = y
...
1373 ARCH := arm64

1375 CROSS_COMPILE=aarch64-linux-gnu-
...
1378 KSRC=~/fH5/NanoPi-NEO2/sources/linux/

修改完成后,执行Makefile, 最终会生成8189fs.ko。在板上系统加载此驱动模块后,会有”wlan0”网络设备.
————————————————
版权声明:本文为CSDN博主「jklinux」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jklinux/article/details/78737691

(原文在这里)[https://stray.love/itshou-zha/wei-aria2-tian-jia-tracker-fu-wu-qi]

把下面脚本放入定时任务,然后通过rpc更新 ,简单方便快捷

1
2
3
4
5
6
7
8
9
#!/bin/sh
#more trackers list, see https://github.com/ngosang/trackerslist

tracker_url='https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_all.txt'
path='http://10.10.10.5:6800/jsonrpc'
passwd='xxxxxx'

tracker=$(echo -n $(curl -s -L $tracker_url | sed 'N;s/\n//g') | tr ' ' ',')
[ -n "$tracker" ] && curl $path -d '{"jsonrpc":"2.0","method":"aria2.changeGlobalOption","id":"cron","params":["token:'$passwd'",{"bt-tracker":"'$tracker'"}]}'

利用猫盘做一个下载机,其实也没什么东西要下载,迅雷都可以,干嘛还要做这样一台机呢? 折腾罢了. aria2下载速度远远不如迅雷的,但是还要折腾这个,还是有一点比迅雷好的地方的,就是可以利用晚上时间下载.

猫盘刷debin系统, 不表.

fireware在这里

然后apt instll aria2 nginx等组件.

airaNg 的要手动下载,apt 安装不了.

重点说配置把,aria2 最重要就是配置文件,这个网上有, 主要事要做一个service加入系统服务中
在/etc/systemd/system 下面做一个aira2.service文件

1
2
3
4
5
6
7
8
9
[Unit]
Description=Aria2 Service
After=network.target

[Service]
ExecStart=aria2c --enable-rpc=true --input-file=/root/aria2/aria2.session --conf-path=/root/aria2/aria2.conf

[Install]
WantedBy=multi-user.target

必须放入/etc/systemd/system中,不要放入user文件夹中 ,会导致退出登录后无法连接到airaNg的问题.

ariaNg 下载后/var/www/html/下面 ,不要放到其他地方,如果放到其他地方,nginx 要配置,当然如果你会配nginx,当我没说. 我比较懒,就不配了,自己放入,然后就可以访问.