当前位置: 首页 > news >正文

2四、buildroot支持第三方软件

一、wpa_supplicant软件移植

1.buildroot编译wpa_supplicant 程序到文件系统

buildroot-2023.02$ make menuconfig

搜索

选中

Target packages --->

        Networking applications --->

                [*] wpa_supplicant --->

                [*] Enable nl80211 support

buildroot-2023.02$ make -j12

2.测试wpa_supplicant软件

buildroot-2023.02/output/images/rootfs.tar.bz2拷贝到imx6ull-iot-smart-car/fs/rootfs-buildroot

录解压测试。通过NFS形式挂载根文件系统,运行wpa_supplicant程序效果如下:

3.手动连接wifi

(1)拷贝wifi驱动和wpa_supplicant配置文件

是旧的,我们可能没有

我们采用手动创建

创建驱动文件夹

找到之前编译好的驱动

拷贝

创建并打开修改配置文件

需要注意的是我这里使用的 buildroot 版本目前下载的 wpa_supplicant 版本为 wpa_supplicant v2.10

该版本已经没有 ctrl_interface 这个参数了,在配置文件中需要去除,不然后面使用中会报如下错误:

Line 1: unknown global field 'ctrl_interface=/var/run/wpa_supplicant'.

Line 1: Invalid configuration line 'ctrl_interface=/var/run/wpa_supplicant'.

Failed to read or parse configuration '/wpa_supplicant/wpa_supplicant.conf'

修改wpa_supplicant.conf配置文件如下:

ap_scan=1

network={

        #链接的wifi名称

        ssid="tplink"

        #密码

        psk="12345678"

        priority=1

}

(2)加载驱动

# cd driver/

# ls

8723bu.ko

# insmod 8723bu.ko

加载驱动

RTL871X: module init start

RTL871X: rtl8723bu v4.3.6.11_12942.20141204_BTCOEX20140507-4E40

RTL871X: rtl8723bu BT-Coex version = BTCOEX20140507-4E40

RTL871X: rtw_ndev_init(wlan0)

RTL871X: rtw_ndev_init(wlan1)

usbcore: registered new interface driver rtl8723bu

RTL871X: module init ret=0

(3)运行wpa_supplicant

wpa_supplicant -i wlan0 -c /wpa_supplicant/wpa_supplicant.conf -B

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

RTL871X: RTW_ADAPTIVITY_EN_AUTO, chplan:0x20, Regulation:3,3

RTL871X: RTW_ADAPTIVITY_MODE_NORMAL

IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready

RTL871X: rtw_set_802_11_connect(wlan0)

fw_state=0x00000008

RTL871X: start auth

RTL871X: auth success, start assoc

RTL871X: rtw_cfg80211_indicate_connect(wlan0) BSS not found !!

RTL871X: assoc success

IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready

RTL871X: send eapol packet

RTL871X: send eapol packet

RTL871X: set pairwise key camid:4, addr:30:fc:68:3a:40:c4, kid:0, type:AES

RTL871X: set group key camid:5, addr:30:fc:68:3a:40:c4, kid:2, type:AES

(4)获取IP地址

udhcpc -iwlan0

udhcpc: started, v1.35.0

udhcpc: broadcasting discover

udhcpc: broadcasting select for 192.168.1.102, server 192.168.1.1

udhcpc: lease of 192.168.1.102 obtained from 192.168.1.1, lease time 7200

deleting routers

adding dns 192.168.1.1

4.系统启动自动连接wifi

(1)介绍

这里使用 buildroot 默认会使用 busybox 来构建根文件系统,它有自己的 init 进程。该进程会在启动后读

取 /etc/inittab 文件内容,并执行其中命令。默认设置下它会在开机时进行一些必要的文件系统及网络操

作,最后执行 /etc/init.d/rcS 脚本。

#!/bin/sh

# Start all init scripts in /etc/init.d

# executing them in numerical order.

#

 for i in /etc/init.d/S??* ;do

        # Ignore dangling symlinks (if any).

                [ ! -f "$i" ] && continue

        case "$i" in

                *.sh)

                        # Source shell script for speed.

                        (

                                trap - INT QUIT TSTP

                                set start

                                . $i

                        )

                        ;;

                *)

                        # No sh extension, so fork subprocess.

                $i start

                ;;

        esac

done

/etc/init.d/rcS 脚本会依据文件名排序依次执行 /etc/init.d/ 目录下文件名为 S??* 的文件中的 start 方法

(比如 S01syslogd 、 S50sshd 等)。

另外在 /etc/inittab 可以看到系统会在关机前执行 /etc/init.d/rcK 脚本。该脚本会执行 S??* 的文件中的

stop 方法。

所以对于我们来说要在开机时执行命令可以在 /etc/init.d/ 目录下新建名为 S??* 格式的文件然后在其

中编写一个 start 方法,在其中写上我们需要开机执行的命令即可。

(2)编写开机启动脚本

在这里我们在开发板 /etc/init.d/ 目录下新建名为 S99wifi 的脚本,其内容如下:

#!/bin/sh

#

# wifi Starts wifi.

#

umask 077

start() {

        printf "Starting wpa_supplicant and udhcpc for wlan0: "

        insmod /wpa_supplicant/driver/8723bu.ko

        wpa_supplicant -i wlan0 -c /wpa_supplicant/wpa_supplicant.conf -B

        udhcpc -i wlan0

        echo "OK

}

stop(){

        printf “Stopping wpa_supplicant:”

        killall wpa_supplicant

        echo "OK"

}

restart() {

        stop

        start

}

case "$1" in

        start)

                start

                ;;

stop)

stop

;;

restart|reload)

        restart

        ;;

*)

        echo "Usage: $0 {start|stop|restart}"

        exit 1

esac

exit $?

(3)添加执行权限

rootfs-buildroot/etc/init.d$ chmod 777 S99wifi

二、openssh软件移植

  1. 介绍

OpenSSH 是 SSH (Secure Shell) 协议的免费开源实现。**SSH协议族可以用来进行远程控制, 或在

计算机之间传送文件。**而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是

极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远

程控制和文件传输过程中的数据,并由此来代替原来的类似服务。

2.buildroot配置及编译

(1)配置

buildroot-2023.02$ make menuconfig

        Target packages----->

                Networking applications------>

                        [*] openssh

(2)编译

buildroot-2023.02$ make -j12

3.配置配置sshd运行环境

修改rootfs目录下的/etc/ssh/sshd_config 文件,将 #PermitRootLogin prohibit-password 改为 Permit

RootLogin yes

4.启动sshd服务进程

在开发板上启动sshd进程

$ /usr/sbin/sshd

/var/empty must be owned by root and not group or world-writable.

修改如下:

# chown root:root /var/empty/

5.验证ssh

(1)在主机ubuntu上通过ssh登录开发板

(2)在主机ubuntu上通过ssh传输文件

(3)在windows上ssh登录开发板并传输文件

6.sshd 启动慢解决办法

sshd 在开机自启的时候占用了很长的一段时间,仔细观察打印信息发现,sshd 一定要等待直到

random: nonblocking pool is initialized 初始化结束后才能正常启动。这是因为在sshd服务的启动的时

候** SSH Keys **的产生依赖于随机数导致的。解决方法如下:

修改Linux内核源码drivers/char/random.c 约 900 行处。void add_interrupt_randomness(int irq, int

irq_flags) 中有一处判断:

if ((fast_pool->count < 64) && !time_after(now, fast_pool->last + HZ))

        return;

在此基础上加上 nonblocking_pool.initialized 判断:

if ((fast_pool->count < 64) && !time_after(now, fast_pool->last + HZ) && nonblocking_pool.initialized )

        return;

三、alsa软件移植

1.alsa介绍

ALSA全称是Advanced Linux Sound Architecture,中文音译是Linux高级声音体系。ALSA 是Linux内

核2.6后续版本中支持音频系统的标准接口程序,由ALSA库、内核驱动和相关测 试开发工具组成,更好

的管理Linux中音频系统。 ALSA是Linux系统中为声卡提供驱动的内核组件。它提供了专门的库函数来

简化相应应用程序的编写。ALSA系统包括7个子项目:

驱动包alsa-driver

开发包alsa-libs

开发包插件alsa-libplugins

设置管理工具包alsa-utils

OSS(OSS全称Open Sound System是unix平台上一个统一的音频接口)接口兼容模拟层工具alsa

特殊音频固件支持包alsa-firmware

其他声音相关处理小程序包alsa-tools

移植ALSA主要是移植alsa-lib和alsa-utils。

alsa-lib :用户空间函数库, 封装驱动提供的抽象接口, 通过文件libasound.so提供API给应用程序使

用。

alsa-utils:实用工具包,通过调用alsa-lib实现播放音频(aplay)、录音(arecord) 等工具。

ALSA Utils是纯应用层的软件,相当于ALSA设备的测试程序,ALSA-Lib则是支持应用API的中间层程

序,ALSA-Utils中的应用程序中会调用到ALSA-Lib中的接口来操作到我们的音频编解码芯片的寄存器,

而lib中接口就是依赖于最底层驱动代码,因此移植ALSA程序的顺序就是先后移植Driver,Lib,Utils。

2.buildroot配置及编译

(1)使能 alsa-lib

Target packages

        ----> Libraries

        -----> Audio/Sound

        ------> -*- alsa-lib ---> 此配置项下的文件全部选中

(2)使能 alsa-utils

Target packages-----> 

---------> Audio and video applications

------> alsa-utils

此目录下的软件全部选中

3.设备树修改

修改Linux内核源码下的arch/arm/boot/dts/imx6ull-14x14-smartcar.dts文件,

修改如下:

4.播放音乐测试

(1)准备wav格式音乐

在线MP3转换wav地址:https://audio.worthsee.com/convert/MP3-to-WAV

(2)使用 amixer 设置声卡

设置耳机左声道和右声道声音大小(0-127)

amixer sset Headphone 100,100

设置扬声器(喇叭)左声道和右声道声音大小(0-127)

amixer sset Speaker 120,120

设置左声道输出打开

amixer sset 'Right Output Mixer PCM' on

设置右声道输出打开

amixer sset 'Left Output Mixer PCM' on

(3)播放音乐

aplay music.wav

5.录音测试

(1)WM8960音频解码硬件原理图及驱动修改

从硬件原理图可以知道我们只接了左声道没有接右声道,也就是说MIC 录出来的只有左声道有声音,那么

我们能不能让只接到左声道的 MIC 录制出来的音频是双声道的呢?如果我们能让左右声道就共同使用一

个 MIC,录出来的音频就 是双声道的,虽然两个声道的数据是一模一样的。

打开WM8960 的数据手册了,我们可以配置 WM8960 的右声道 ADC 直接使用左声道的数据

我们在Linux内核源码中找到音频驱动:

修改驱动代码如下:

(2)使用 amixer 设置声卡

#!/bin/sh

#.....................

amixer cset name='Capture Volume' 100,100

#PCM

amixer sset 'PCM Playback -6dB' on

amixer sset 'Playback' 255

amixer sset 'Right Output Mixer PCM' on

amixer sset 'Left Output Mixer PCM' on

#ADC PCM

amixer sset 'ADC PCM' 200

#Turn on Headphone

amixer sset 'Headphone Playback ZC' on

#Set the volume of your headphones(98% volume...127 is the MaxVolume)

amixer sset Headphone 125,125

#Turn on the speaker

amixer sset 'Speaker Playback ZC' on

#Set the volume of your Speaker(98% volume...127 is the MaxVolume)

amixer sset Speaker 125,125

#Set the volume of your Speaker AC(80% volume...100 is the MaxVolume)

amixer sset 'Speaker AC' 4

#Set the volume of your Speaker AC(80% volume...5 is the MaxVolume)

amixer sset 'Speaker DC' 4

#音频输入,左声道管理

#Turn on Left Input Mixer Boost

amixer sset 'Left Input Mixer Boost' on

#Turn on Left Boost Mixer LINPUT1

amixer sset 'Left Boost Mixer LINPUT1' on

amixer sset 'Left Input Boost Mixer LINPUT1' 3

#Turn off Left Boost Mixer LINPUT2

amixer sset 'Left Boost Mixer LINPUT2' off

amixer sset 'Left Input Boost Mixer LINPUT2' 0

#Turn on Left Boost Mixer LINPUT3

amixer sset 'Left Boost Mixer LINPUT3' on

amixer sset 'Left Input Boost Mixer LINPUT3' 7

#音频输入,右声道管理,全部关闭

#Turn on Right Input Mixer Boost

amixer sset 'Right Input Mixer Boost' off

amixer sset 'Right Boost Mixer RINPUT1' off

amixer sset 'Right Input Boost Mixer RINPUT2' 0

amixer sset 'Right Boost Mixer RINPUT2' off

amixer sset 'Right Input Boost Mixer RINPUT2' 0

amixer sset 'Right Boost Mixer RINPUT3' off

amixer sset 'Right Input Boost Mixer RINPUT3' 0

(3)录音

arecord -d 10 -f cd -t wav record.wav

-d 是指定录音时间,单位是 s

-f 是设置录音质量,"-f cd"表示录音质量为 cd 级别

-t 指定录制的格式,WAV

这条指令就是录制一段 cd 级别 10s 的 wav 音频,音频名字为 record.wav

5.alsamixer图形化界面配置声卡

http://www.dtcms.com/a/501117.html

相关文章:

  • 做微信的微网站费用多少商铺装修找谁
  • 哪个公司制作网站好个人可以建设哪些网站
  • 上海网站建设怎么样长沙网站快速排名提升
  • 网站开发工程师的经验wordpress知更鸟more
  • 雅布设计中国分公司在哪里新站优化
  • 异数OS-织梦师-操作系统与数据库的合体(十一)-使用异数OS打造高性能低成本元宇宙OLTP数据库引擎
  • 免费设立网站新建网站如何调试
  • 拨付网站建设费用的报告百度网站评分
  • 麻涌镇网站仿做域名解析映射到网站空间怎么做
  • 赚钱的网站开发项目网站关键词排名
  • SAP MM寄售发票校验接口分享
  • 新网站制作公司网站嵌入js
  • 做美妆网站的关键词用户登录界面设计
  • PrivaZer Pro v4.0.111_Win中文_电脑清理工具 _安装教程
  • 低电容ESD保护二极管设计指南:选型要点与ASIM解决方案
  • 做网站便宜服务器网站后台登陆密码黄框显示
  • 网站前台订单功能模块凡客网站做SEO能被收录吗
  • 司法网站建设与维护 教材域名续费一般多少一年
  • 潜山做网站wordpress 釆集插件
  • StackedGAN详解与实现
  • 怎么开网站平台WordPress图片上传最大尺寸
  • 大连网站制作 姚喜运襄阳旅游景点网站建设
  • 深圳建设工程协会网站seo有哪些优化工具
  • 化妆品购物网站排名负责做网站的叫什么公司
  • 大连html5网站建设价格重庆app定制软件开发
  • wordpress谷歌字体加载慢漳州网站优化
  • 网站会员后台网站设计什么价位
  • 网站开发工程师有证书考试吗深圳专业网站建设公司
  • 【微知】一些常用的日常技术英语词语或者词组(不断更新)
  • 绿建设计院网站php 上传网站