tag 标签: Linux驱动开发

相关帖子
相关博文
  • 热度 5
    2024-4-23 07:52
    883 次阅读|
    0 个评论
    【一文秒懂】Linux ADB调试环境搭建指南 1、ADB介绍 ADB : Android Debug Bridge ,安卓调试桥,是用的最多的一种命令行工具,它能够在电脑端和安卓支持的设备端进行通信,其通信方式有两种: USB 或者 TCP/IP 。 它能够支持多种设备端的操作,包括:网络,脚本,安装和调试应用,文件传输等,同时也支持访问 unix shell 。 adb 命令行工具,随着安卓 SDK 平台工具一起发布,是安卓 SDK 的一个组件。 2、ADB架构及组成 它是一个 C/S(client-server) 架构的应用程序,由三部分组成: adb client :运行在 PC 上,你能够运行 adb 命令来执行它。 adb daemon :守护进程,运行在设备端的后台 adb server :服务进程,运行在 PC ,管理 adb client 和 adb daemon 之间的通信 server 与 client 通信的端口是 5037 , adb server 与 emulator 交互时使用的端口有两个: 5554 :专门用于与 Emulator 实例的连接 5555 :专门用于与 daemon 连接 3、环境搭建 3.1 主机端安装 如果你的主机端是 linux ,则 sudo apt install adb 如果你的主机端为 windows ,则需要下载安装包:【 adb 】,安装完后,可以在当前路径下运行,也可以加入环境变量中,【 安装文档 】 下文以 linux 系统为例,安装完毕后,可以查看版本信息: $ adb version Android Debug Bridge version 1.0.39 Version 1:8.1.0+r23-5~18.04 Installed as /usr/lib/android-sdk/platform-tools/adb 3.2 客户端安装 如上图所示,需要在客户端安装 adbd 的守护进程,来与 PC 端的 adb server 通信。 adbd 的软件包获取: buildroot 构建工具:通过选择 android adbd 来直接编译得到 BR2_PACKAGE_ANDROID_TOOLS_ADBD=y 还有一种方式:精简版 adbd 软件包(放到软件仓库了) 编译完成之后,直接将该工具放到系统开发板上,保持后台运行即可。 3.3 内核支持 adbd 支持两种通信方式,一种是 USB ,一种是 TCP ,所以我们内核必须支持所需的通信协议。 不同的开发板,厂商驱动代码不同,配置多多少少也会有差异,以下仅作参考: USB 配置如下: # 必选 CONFIG_USB_GADGET=y# 作为USB从机,也就是设备端 CONFIG_USB_XXX_UDC=y# USB控制器驱动,根据厂商选择 CONFIG_USB_CONFIGFS=y# USB配置文件系统,通过文件来配置功能 CONFIG_USB_CONFIGFS_F_FS=y# USB功能文件系统,启用USB 功能文件系统支持 ​ # 可选的一些功能 CONFIG_USB_CONFIGFS_ACM=y# 一种USB设备模式,用于模拟串口设备的通信。 CONFIG_USB_CONFIGFS_MASS_STORAGE=y# USB大容量存储功能 内核配置打开后,一定不要忘了在 dts 设备树中打开 USB 配置。 4、如何使用 我们想要使用 adb ,首先需要在开发板上启动 adbd 后台进程, adbd 与主机端的 adb 通信是通过 USB 或者 Tcp/Ip 的,所以就需要提前配置。 4.1 USB连接 USB 通常是通过 configfs 来配置 USB 各种功能的,以下为一个示例: #!/bin/sh ​ case "$1"in start) ​ test -d /sys/kernel/config || mkdir /sys/kernel/config mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 cd /sys/kernel/config/usb_gadget/g1 ​ idVendor idProduct ​ mkdir strings/0x409 strings/0x409/serialnumber ​ strings/0x409/manufacturer strings/0x409/product ​ mkdir configs/b.1 mkdir configs/b.1/strings/0x409 configs/b.1/strings/0x409/configuration configs/b.1/strings/0x409/configuration configs/b.1/MaxPower ​ cur_path=`pwd` mkdir-p$cur_path'/functions/ffs.adb' ln-s /sys/kernel/config/usb_gadget/g1/functions/ffs.adb /sys/kernel/config/usb_gadget/g1/configs/b.1/ffs.adb ​ mkdir-p /dev/usb-ffs/adb mount -ouid=2000,gid=2000-t functionfs adb /dev/usb-ffs/adb ​ cd / ​ adbd & ​ UDC=`ls /sys/class/udc/| awk '{print $1}'` /sys/kernel/config/usb_gadget/g1/UDC & ;; stop) /sys/kernel/config/usb_gadget/g1/UDC ;; restart|reload|force-reload) &2 exit3 ;; *) &2 exit3 ;; esac ​ 上面是一个示例,如果调起来比较困难,也可以在 资料库 中直接获取最简单的 adb 配置。 更多干货可见: 高级工程师聚集地 ,助力大家更上一层楼! 后台 USB 配置成功后,可以直接启动 adbd 服务。 # adbd & ​ # 下面是打印信息 install_listener('tcp:5037','*smartsocket*') read descriptors cannot bind 'tcp:5037' warnning! use usb only read strings adbd may crash Using USB 表示不能够绑定到 tcp ,指定用 usb 4.2 无线连接 这种方式,需要你的设备端连接到网络,通常使用 WiFi 来连接,连接成功后查看服务器和设备端的 IP 地址,如下: 设备端 : # ifconfig wlan0 Link encap:Ethernet HWaddr 9C:84:B6:62:9F:54 inet addr:192.168.50.136 Bcast:192.168.50.255 Mask:255.255.255.0 inet6 addr: fe80::9e84:b6ff:fe62:9f54/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3247 errors:0 dropped:286 overruns:0 frame:0 TX packets:320 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:409353 (399.7 KiB) TX bytes:31375 (30.6 KiB) 主机端尝试 ping 设备端的 IP 地址, ping 通即可保证链路正常。 dong@ubuntu:~$ ping192.168.50.136 PING 192.168.50.136 (192.168.50.136) 56(84) bytes of data. 64 bytes from 192.168.50.136: icmp_seq=1ttl=128time=18.5 ms 64 bytes from 192.168.50.136: icmp_seq=2ttl=128time=8.04 ms 查看设备端监听的端口 # netstat -an Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:5555 0.0.0.0:* LISTEN Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 3 DGRAM 50 /dev/log unix 2 DGRAM 17723 /var/run/wpa_supplicant/wlan0 unix 2 SEQPACKET LISTENING 11722 /run/udev/control unix 2 STREAM LISTENING 11023 @jdwp-control unix 3 STREAM CONNECTED 11020 unix 3 DGRAM 10422 unix 3 DGRAM 10421 unix 3 STREAM CONNECTED 11024 unix 3 STREAM CONNECTED 11025 unix 3 STREAM CONNECTED 11021 unix 3 STREAM CONNECTED 838 unix 2 DGRAM 53 unix 3 STREAM CONNECTED 837 主机端连接 dong@ubuntu:~$ adb connect 192.168.50.136:5555 connected to 192.168.50.136:5555 查看 adb 设备 dong@ubuntu:~$ adb devices List of devices attached 192.168.50.136:5555 device 到此即为连接成功。 5、常用命令 命令 说明 adb device 查看连接设备 adb push 向设备端中推送文件 adb pull 从设备端拉取文件 adb install 安装应用 adb uninstall 卸载应用 adb shell pm list packages 列出手机装的所有 app 的包名 adb shell pm list packages -3 列出除了系统应用的第三方应用包名 adb shell pm clear 清除应用数据与缓存 adb shell pm disable-user 禁用应用 adb shell pm enable 启用应用 连接设备: adb devices该命令列出连接到计算机的所有 Android 设备。确保你的设备通过 USB 连接,并且 USB 调试选项已启用。 连接设备的 Shell: adb shell该命令允许你在设备上运行交互式 shell。 推送文件到设备: adb push local_file_path /device/path将本地文件推送到设备上指定路径。替换 local_file_path 为本地文件路径, /device/path 为设备上的目标路径。 拉取文件从设备: adb pull /device/path local_file_path从设备上拉取文件到本地。替换 /device/path 为设备上的文件路径, local_file_path 为本地目标路径。 安装应用: adb install app.apk安装应用到设备。替换 app.apk 为你要安装的应用的 APK 文件。 卸载应用: adb uninstall package_name卸载设备上的应用。替换 package_name 为应用的包名。 查看设备日志: adb logcat查看设备上的实时日志。 重启设备: adb reboot重启连接的设备。 查看设备信息: adb devices -l以详细格式列出连接的设备信息。 查看设备状态: adb get-state显示设备的连接状态,例如 device 、 offline 等。 这只是一小部分 ADB 命令,还有更多功能和选项可供使用。你可以通过运行 adb 命令来查看所有可用的选项和子命令。例如: adb --help 请注意,有些命令可能需要设备处于开发者模式下,并启用 USB 调试。 如果不是 android 设备,一般我们最常用的就是前3条指令了~ 更多文章,可关·注·公·号:【嵌入式艺术】,同时也为大家准备了学习福利,可免费领取。 6、总结 以上,这篇文章主要介绍了 ADB 工具的架构以及如何部署,如何使用,希望对大家有所帮助。
  • 热度 3
    2024-4-2 08:07
    1074 次阅读|
    1 个评论
    【WiFi开发全攻略】WIFI常用工具汇总 本节主要介绍我们开发过程中, WiFi 常用的开发工具,内容主要介绍工具种类以及基本的使用方法,更多使用可以见后面章节。 1、iwconfig iwconfig 是一个用于配置和显示无线网络接口参数的命令行工具。它通常与 Linux 下的无线网络设备一起使用,允许用户查看和更改无线网络接口的各种设置。 # iwconfig --help Usage: iwconfig interface essid {NNN|any|on|off} interface mode {managed|ad-hoc|master|...} interface freq N.NNN interface channel N interface bit {N |auto|fixed} interface rate {N |auto|fixed} interface enc {NNNN-NNNN|off} interface key {NNNN-NNNN|off} interface power {period N|timeout N|saving N|off} interface nickname NNN interface nwid {NN|on|off} interface ap {N|off|auto} interface txpower {NmW|NdBm|off|auto} interface sens N interface retry {limit N|lifetime N} interface rts {N|auto|fixed|off} interface frag {N|auto|fixed|off} interface modulation {11g|11a|CCK|OFDMg|...} interface commit Check man pages for more details. 常用命令如下 : iwconfig wlan0 # 查看wlan0网卡信息 iwconfig wlan0 essid off# essid配置 iwconfig wlan0 freq 2422000000# 设置频率 iwconfig wlan0 freq 2.422G# 设置频率 iwconfig wlan0 channel 3# 设置信道 iwconfig wlan0 channel auto# 设置信道 iwconfig wlan0 modu 11g# 强制设置调制方式 iwconfig wlan0 modu CCK OFDMa# 强制设置调制方式 iwconfig wlan0 modu auto# 强制设置调制方式 iwconfig wlan0 txpower 15# 设置发射功率为15dBm iwconfig wlan0 txpower 30mW# 设置发射功率:dBm=30+log(W) iwconfig wlan0 txpower auto# 设置自动选择发射功率 iwconfig wlan0 txpower off# 关闭发射单元 iwconfig wlan0 sens -80# 负数为接收灵敏度下限,低则表信号差,网卡会采取措施 iwconfig wlan0 sens 2# 正数表示百分比 iwconfig wlan0 retry 16# 设置最大重传次数 iwconfig wlan0 retry lifetime 300m# 设置最长重试时间,默认单位为秒 iwconfig wlan0 retry min limit 8# 若支持自动模式,min和max指定上下限 iwconfig wlan0 rts 250# 设置握手最小包的大小,等于最大值表禁止该机制 iwconfig wlan0 rts off# auto/off/fixed禁止RTS/CTS握手方式 iwconfig wlan0 frag 512# 设置发送数据包的分片大小 iwconfig wlan0 frag off# auto/fixed/off允许Burst模式 iwconfig wlan0 power period 2# 指定唤醒的周期,默认单位为秒 iwconfig wlan0 power 500m unicast# all/unicast/multicast指定允许唤醒的数据包类型 iwconfig wlan0 power timeout 300u all# all/unicast/multicast指定允许唤醒的数据包类型 iwconfig wlan0 power off# off/on参数指定是否允许电源管理 iwconfig wlan0 power min period 2 power max period 4# 指定唤醒的周期 2、iwlist iwlist 是一个用于显示无线网络接口附近的网络信息的命令行工具。它可以用于扫描附近的无线网络,并显示它们的详细信息。 # iwlist Usage: iwlist scanning frequency channel bitrate rate encryption keys power txpower retry ap accesspoints peers event auth wpakeys genie modulation 基础命令如下 : iwlist wlan0 scan # 列出WiFi扫描结果 iwlist wlan0 freq /channel# 列出当前地区可用频率 iwlist wlan0 rate/bit # 列出支持的连接速度 iwlist wlan0 keys/enc # 列出所支持的加密密钥大小 iwlist wlan0 power# 列出电源模式 iwlist wlan0 txpower# 列出传输功耗 iwlist wlan0 retry# 列出重连限制与次数 iwlist wlan0 ap/accesspoint/peers# 列出热点信息 iwlist wlan0 event# 列出设备支持的无线事件 iwlist wlan0 auth# 列出当前设置的WPA认证参数 iwlist wlan0 wpa # 列出设备中设置的所有WPA加密密钥 iwlist wlan0 genie# 列出设置的通用信息元素 iwlist wlan0 modu # 列出设备支持的调制和当前启用的调制 iwlist --version# 列出版本信息 iwlist --help# 列出帮助信息 3、iwgetid iwgetid 是一个用于获取当前连接的无线网络信息的命令行工具。它可以显示当前系统中已连接的无线网络的 SSID(服务集标识符)和接口名称。 # iwgetid -h Usage iwgetid Options are: -a,--ap Print the access point address -c,--channel Print the current channel -f,--freq Print the current frequency -m,--mode Print the current mode -p,--protocol Print the protocol name -r,--raw Format the output as raw value for shell scripts -s,--scheme Format the output as a PCMCIA scheme identifier -h,--help Print this message 常用命令如下 : # iwgetid -a# 获取接入点MAC地址 wlan0 Access Point/Cell: 24:4B:FE:36:E7:68 # iwgetid -c# 获取接入点当前通道 wlan0 Channel:2 # iwgetid -f# 查看接入点频率 wlan0 Frequency:2.417 GHz # iwgetid -m# 查看网卡当前模式 wlan0 Mode:Managed # iwgetid -p# 获取协议 wlan0 Protocol Name:"IEEE 802.11" 4、iw 这个命令好多朋友经常不用这么复杂的工具,但是有必要了解。 iw 是一个用于配置和管理无线网络设备的命令行工具。它提供了丰富的功能,包括显示无线网络设备信息、扫描附近的无线网络、配置连接参数等。 # iw Usage: iw command Options: --debug enable netlink debugging --version show version (5.19) Commands: dev ap stop dev ap start phy coalesce show phy coalesce disable phy coalesce enable dev auth dev connect dev disconnect dev cqm rssi event dev ftm start_responder dev ftm get_stats phy hwsim wakequeues phy hwsim stopqueues phy hwsim setps phy hwsim getps dev ibss join dev ibss leave features commands phy list phy info dev switch channel dev switch freq dev switch freq ] dev dev info dev del dev interface add type phy interface add type help dev link dev measurement ftm_request ] dev mesh_param dump dev mesh leave ...... 常用命令如下 : iw dev# 显示无线网络设备信息 iw dev wlan0 info# 显示指定无线网络设备的详细信息 iw dev wlan0 scan# 扫描周围热点信息 iw dev wlan0 link# 获得连接状态 iw dev wlan0 station dump# 列出所有STA信息 iw dev wlan0 connect wifi名称# 连接至OPEN方式的AP iw dev wlan0 connect wifi名称 2432# 有同名热点AP时指定特定频段 iw dev wlan0 connect wifi名称 key 0:密码 d:1:默认密码# 连接至WEP加密方式的AP iw dev wlan0 disconnect# 断开连接 iw phy # 显示无线设备的物理特性和功能 iw phy phy0 info # 显示支持的无线标准 iw phy phy0 wowlan show # 查看wowlan状态 iw phy phy0 wowlan enable# 使能wowlan,漫游功能需要 更多干货可见: 高级工程师聚集地 ,助力大家更上一层楼! 5、wpa_supplicant wpa_supplicant 是一个用于管理无线网络连接的工具,并且可以支持多种认证和加密方法,如 WPA 、 WPA2 、 WEP 等,能够处理各种复杂的无线网络场景。 # wpa_supplicant -h wpa_supplicant v2.11-devel-1.0 Copyright (c) 2003-2022, Jouni Malinen and contributors ​ This software may be distributed under the terms of the BSD license. See README for more details. ​ usage: wpa_supplicant \ \ -i -c \ \ \ \ \ ...] ​ drivers: nl80211 = Linux nl80211/cfg80211 options: -b= optional bridge interface name -B= run daemon in the background -c= Configuration file -C= ctrl_interface parameter (only used if-c is not) -d= increase debugging verbosity (-dd even more) -D= driver name (can be multiple drivers: nl80211,wext) -e= entropy file -g= global ctrl_interface -G= global ctrl_interface group -h= show this help text -H= connect to a hostapd instance to manage state changes -i= interface name -I= additional configuration file -K= include keys (passwords, etc.) in debug output -L= show license (BSD) -m= Configuration file for the P2P Device interface -N=start describing new interface -o= override driver parameter for new interfaces -O= override ctrl_interface parameter for new interfaces -p= driver parameters -P= PID file -q= decrease debugging verbosity (-qq even less) -s= log output to syslog instead of stdout -t= include timestamp in debug messages -v= show version -W= wait for a control interface monitor before starting example: wpa_supplicant -Dnl80211-iwlan0-c/etc/wpa_supplicant.conf 常用命令如下 : wpa_supplicant -iwlan0-Dnl80211-B-c/tmp/wpa_supplicant.conf# 联网配置,conf为具体的配置信息 # -i设置网卡接口,-D设置驱动名,-B设置后台进行,-c添加配置文件 6、wpa_cli wpa_cli 是一个用于与 wpa_supplicant 通信的命令行工具。它允许用户通过命令行界面与正在运行的 wpa_supplicant 进程进行交互,以管理无线网络连接、配置网络参数等。 wpa_cli 需要运行在 wpa_supplicant 服务之上,通信方式有两种,一种是进入到新的命令行窗口,交互式输入;一种是直接命令输入并及时返回 交互式 : # wpa_cli# 单独输入该命令,进入新的交互窗口 ​ wpa_cli v2.9 Copyright (c) 2004-2019, Jouni Malinen and contributors ​ This software may be distributed under the terms of the BSD license. See README for more details. ​ ​ Selected interface 'wlan0' ​ Interactive mode help# 输入help可以查看所有支持的命令 commands: status =get current WPA/EAPOL/EAP status ifname =get current interface name ping= pings wpa_supplicant relog = re-open log-file (allow rolling logs) note = add a note to wpa_supplicant debug log mib =get MIB variables (dot1x, dot11) help = show usage help interface = show interfaces/select interface 命令格式 : wpa_cli help# 打印帮助信息 wpa_cli -i wlan0 status# 显示当前连接信息 wpa_cli -i wlan0 scan# 搜索周围WiFi信息 wpa_cli -i wlan0 scan_result# 显示上一次的搜索结果 wpa_cli -i wlan0 list_networks# 显示已配置的网络与信息 wpa_cli -i wlan0 add_network# 添加一个网络返回一个数字n wpa_cli -i wlan0 set_network n ssid '"name"'# 输入要连接的WiFi名称 wpa_cli -i wlan0 set_network n key_mgmt NONE# 输入加密方式OPEN/WEP wpa_cli -i wlan0 set_network n wep_key0 '"psk"'# 输入加密方式WEP的密码 wpa_cli -i wlan0 set_network n psk '"psk"'# 输入加密方式WPA/WPA2的密码 wpa_cli -i wlan0 enable_network n# 设置后需要启用WiFi wpa_cli -i wlan0 save_config# 保存WiFi配置 wpa_cli -i wlan0 select_network n# 有多个WiFi时选择其中一个 wpa_cli -i wlan0 reconfigure# 重新加载配置文件 wpa_cli -i wlan0 disconnect# 断开WiFi连接 wpa_cli -i wlan0 reconnect# 重新连接 wpa_cli -i wlan0 remove_network n# 移除WiFi配置 wpa_cli -i wlan0 terminate# 关闭后台服务器程序 wpa_cli ] ... ... ​ -i IFACE Interface to use (default eth0) -s PROG Run PROG at DHCP events (default /usr/share/udhcpc/default.script) -p FILE Create pidfile -B Request broadcast replies -t N Send up to N discover packets (default 3) -T SEC Pause between packets (default 3) -A SEC Wait if lease is not obtained (default 20) -b Background if lease is not obtained -n Exit if lease is not obtained -q Exit after obtaining lease -R Release IP on exit -f Run in foreground -S Log to syslog too -a Validate offered address with ARP ping -r IP Request this IP address -o Don't request any options (unless -O is given) -O OPT Request option OPT from server (cumulative) -x OPT:VAL Include option OPT in sent packets (cumulative) Examples of string, numeric, and hex byte opts: -x hostname:bbox - option 12 -x lease:3600 - option 51 (lease time) -x 0x3d:0100BEEFC0FFEE - option 61 (client id) -x14:'"dumpfile"'- option 14 (shell-quoted) -F NAME Ask server to update DNS mapping for NAME -V VENDOR Vendor identifier (default 'udhcp VERSION') -C Don't send MAC as client identifier Signals: USR1 Renew lease USR2 Release lease 常用命令如下 : udhcpc -iwlan0-t10-T2-A10-b-s/etc/udhcpc.script# 分配IP地址 # -i选择网卡接口 -t发送5个发现报文 -T包间等待5秒 -A未获得租约,等待10S, -s添加分配IP的配置文件 7、hostapd hostapd 是一个用于在 Linux 系统上实现无线访问点功能的软件。它能够将支持的无线网络接口(如 Wi-Fi 适配器)配置为一个独立的访问点,允许其他设备通过 Wi-Fi 连接到该访问点并访问网络。 # hostapd -h usage: hostapd \ \ \ ​ options: -h show this usage -d show more debug messages (-dd for even more) -B run daemon in the background -e entropy file -g global control interface path -G group for control interfaces -P PID file -K include key data in debug messages -i list of interface names to use -s log output to syslog instead of stdout -Sstart all the interfaces synchronously -t include timestamps in some debug messages -v show hostapd version 常用命令如下 : hostapd -B /tmp/hostapd.conf# 开启热点 # -B后台运行 后面是我们的配置文件 hostapd.conf为AP热点设置的信息 8、hostapd_cli hostapd_cli 同 wpa_cli 一样,都属于客户端, hostapd_cli 依赖于 hostapd 服务,需要在后台运行。 hostapd_cli 是 hostapd 的命令行接口工具,用于与运行中的 hostapd 进程进行交互。通过 hostapd_cli ,用户可以实时监控和配置 hostapd 的运行状态,以及对无线访问点进行管理。 # hostapd_cli -h usage: hostapd_cli \ ​ Options: -h help (show this usage text) -v shown version information -p path to find control sockets (default: /var/run/hostapd) -s dir path to open client sockets (default: /var/run/hostapd) -a run in daemon mode executing the action file based on events from hostapd -r try to reconnect when client socket is disconnected. This is useful only when used with -a. -B run a daemon in the background -i Interface to listen on (default: first interface found in the socket path) commands: ping= pings hostapd mib =get MIB variables (dot1x, dot11, radius) relog = reload/truncate debug log output file close_log = disable debug log output file status = show interface status info sta =get MIB variables for one station all_sta =get MIB variables for all stations list_sta = list all stations new_sta = add a new station deauthenticate = deauthenticate a station disassociate = disassociate a station ... 常用命令如下 : hostapd_cli -h# 显示帮助信息 hostapd_cli -v# 显示版本信息 hostapd_cli -p # 指定socket的路径 hostapd_cli -i wlan0 all_sta# 显示所有连接设备 hostapd_cli -i wlan0 sta # 查看某个设备信息 hostapd_cli -i wlan0 interface# 显示网卡接口 hostapd_cli -i wlan0 interface # 指定网卡接口 hostapd_cli -i wlan0 get_config# 获得配置 hostapd_cli -i wlan0 disassociate # 断开某个设备的连接 hostapd_cli -i wlan0 level n# 设置打印级别 hostapd_cli -i wlan0 license# 显示证书 hostapd_cli # 进入交互模式,命令可以为all_sta等 9、udhcpd udhcpd 是一个用于在 Linux 系统上提供 DHCP 服务的小型 DHCP 服务器软件。它是 udhcp 软件包的一部分,通常用于嵌入式系统或者小型网络环境中。 # udhcpd --help BusyBox v1.31.1 (2023-11-09 11:00:52 CST) multi-call binary. ​ Usage: udhcpd ​ DHCP server ​ -f Run in foreground -S Log to syslog too -I ADDR Local address -a MSEC Timeout for ARP ping (default 2000) Signals: USR1 Update lease file 常用命令如下 : udhcpd -f /tmp/udhcpd.conf # -f运行在前台 /tmp/udhcpd.conf 为IP分配相关的配置 更多文章,可关·注·公·号:【嵌入式艺术】,同时也为大家准备了学习福利,可免费领取。 10、总结 以上,简单介绍了一下 WiFi 开发过程中经常使用到的工具,并简单介绍了其相关用法,其中包括: iwconfig iwlist iwgetid iw wpa_supplicant wpa_cli udhcpc hostapd hostapd_cli udhcpd 当然一些特定的工具并没有详细介绍,后面我们在慢慢道来。
  • 热度 2
    2024-1-27 01:43
    740 次阅读|
    0 个评论
    【面试集合】谈谈Linux调度策略 1、常用调度策略 linux内核的三种调度方法: SCHED_OTHER :分时调度策略, SCHED_FIFO:实时调度策略,先到先服务 SCHED_RR:实时调度策略,时间片轮转 实时进程将得到优先调用,实时进程 根据实时优先级决定调度权值 ; 分时进程则 通过nice和counter值决定权值 ,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的进程将会得到优先调度。 2、SHCED_RR与SHCED_FIFO的异同 相同点 : SHCED_RR和SHCED_FIFO都只用于 实时任务 。 创建时优先级大于0(1-99)。 按照 可抢占优先级调度算法 进行。 就绪态的实时任务立即抢占非实时任务。 不同点 : 当采用SHCED_RR策略的 进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾 。将进程放在队列尾保证了所有具有相同优先级的RR任务的调度公平。 SCHED_FIFO一旦占用cpu则 一直运行 。一直运行直到有更高优先级任务到达或自己放弃。 如果有 相同优先级 的实时进程(根据优先级计算的调度权值是一样的)已经准备好,FIFO时必须等待该进程 主动放弃 后才可以运行这个优先级相同的任务。而RR可以让每个任务都执行一段时间。 更多面试集合可见: 高级工程师聚集地 ,助力大家更上一层楼! 3、常见问题及场景 3.1 所有任务都采用linux分时调度策略 创建任务指定采用 分时调度策略 ,并指定优先级nice值(-20~19)。 将根据每个任务的 nice 值确定在cpu上的执行时间(counter)。 如果没有等待资源,则将该任务加入到 就绪队列 中。 调度程序遍历就绪队列中的任务,通过对每个任务动态优先级的计算(counter+20-nice)结果,选择 计算结果最大的一个去运行,当这 个时间片用完后(counter减至0)或者主动放弃cpu时,该任务将被放在 就绪队列末尾(时间片用完)或等待队列(因等待资源而放弃cpu)中。 此时调度程序重复上面计算过程,转到第4步。 当调度程序发现所有就绪任务计算所得的权值都为不大于0时,重复第2步。 3.2 所有任务都采用FIFO 创建进程时指定采用FIFO,并设置实时优先级rt_priority(1-99)。 如果没有等待资源,则将该任务加入到就绪队列中。 调度程序遍历就绪队列,根据实时优先级计算调度权值(1000+rt_priority),选择权值最高的任务使用cpu,该FIFO任务将一直占有cpu直到有优先级更高的任务就绪(即使优先级相同也不行)或者主动放弃(等待资源)。 调度程序发现有优先级更高的任务到达(高优先级任务可能被中断或定时器任务唤醒,再或被当前运行的任务唤醒,等等),则调度程序立即在当前任务 堆栈中保存当前cpu寄存器的所有数据,重新从高优先级任务的堆栈中加载寄存器数据到cpu,此时高优先级的任务开始运行。重复第3步。 如果当前任务因等待资源而主动放弃cpu使用权,则该任务将从就绪队列中删除,加入等待队列,此时重复第3步。 3.3 所有任务都采用RR调度策略(轮转法调度) 创建任务时指定调度参数为 RR ,并设置任务的实时优先级和nice值( nice值 将会转换为该任务的 时间片的长度 )。 如果没有等待资源,则将该任务加入到就绪队列中。 调度程序遍历就绪队列,根据实时优先级计算调度权值( 1000+rt_priority ),选择权值最高的任务使用cpu。 如果就绪队列中的RR任务时间片为 0, 则会根据 nice值 设置该任务的时间片,同时将该任务放入就绪队列的末尾。重复步骤3。 当前任务由于等待资源而主动退出cpu,则其加入等待队列中。重复步骤3。 3.4 系统中既有分时调度,又有时间片轮转调度和先进先出调度 RR调度和FIFO调度的进程属于实时进程,以分时调度的进程是非实时进程。 当实时进程准备就绪后,如果当前cpu正在运行非实时进程,则实时进程立即抢占非实时进程。 RR进程和FIFO进程都采用实时优先级做为调度的权值标准,RR是FIFO的一个延伸。FIFO时,如果两个进程的优先级一样,则这两个优 级一样的进程具体执行哪一个是由其在队列中的未知决定的,这样导致一些不公正性(优先级是一样的,为什么要让你一直运行?),如果将两个优先级一样的任务的调度策略都设为RR,则保证了这两个任务可以循环执行,保证了公平。
  • 热度 1
    2024-1-27 01:40
    1047 次阅读|
    0 个评论
    【面试集合】你知道的 CPU体系架构有哪些? 2.1 CPU体系架构有哪些? 我们常见的 CPU 架构有哪些呢? 如果我们熟悉 Linux ,那么这个问题肯定不难回答! 我们查看内核目录下的 arch 子目录,就可以看到 Linux 所支持的处理器架构,基本属于我们常见的类型了。 # ls ./arch alpha arc arm arm64 c6x h8300 hexagon ia64 Kconfig m68k microblaze mips nds32 nios2 openrisc parisc powerpc riscv s390 sh sparc um unicore32 x86 xtensa 准确来说, CPU 处理器架构主要有以下几种类型 : CISC(复杂指令集计算机) : CISC 架构的 CPU 设计理念是尽可能减少程序指令的数量,以降低 CPU 和内存之间的通信频率。这种架构的一个显著特点是拥有大量的寄存器和复杂的指令集。 Intel 的 x86 架构就是一个典型的 CISC 架构 RISC(精简指令集计算机) : RISC 架构的 CPU 设计理念是通过简化指令集来提高 CPU 的运行效率。这种架构的一个显著特点是拥有较少的寄存器和简单的指令集。 ARM 架构就是一个典型的 RISC 架构 MISC(中间指令集计算机) : MISC 架构的 CPU 设计理念是在 CISC 和 RISC 之间寻找一个平衡点,既不过于复杂也不过于简单。这种架构的一个显著特点是指令集的复杂度介于 CISC 和 RISC 之间 VLIW(超长指令字计算机) : VLIW 架构的 CPU 设计理念是通过增大指令长度来提高并行执行的可能性。这种架构的一个显著特点是指令长度远大于其他架构的 CPU EPIC(显式并行指令计算) : EPIC 架构的 CPU 设计理念是通过显式标记并行指令来提高 CPU 的运行效率。这种架构的一个显著特点是指令集中包含了并行执行的信息。 Intel 的 Itanium 架构就是一个典型的 EPIC 架构 超标量架构 :超标量架构的 CPU 设计理念是通过在一个时钟周期内执行多条指令来提高 CPU 的运行效率。这种架构的一个显著特点是 CPU 内部包含了多个执行单元,可以同时执行多条指令 超线程技术 :超线程技术是 Intel 公司为其部分 CPU 所采用的一种使单一处理器像多个逻辑处理器那样并行处理多个线程的技术 多核心架构 :多核心架构的 CPU 设计理念是在一个 CPU 芯片内集成多个处理器核心,以提高并行处理能力。这种架构的一个显著特点是 CPU 内部包含了多个独立的处理器核心,每个核心可以独立执行指令 这里就有一个疑问,我们什么时候说 RISC 架构,什么时候说 ARM 架构,这两个有什么区别呢? 以 ARM 和 RISC 为例: ARM 架构和 RISC 架构的主要区别在于 ARM 实际上是 RISC 的一个具体实现,而 RISC 则是一个更广泛的处理器 设计理念 。换句话说, ARM 是 RISC 的一个子集。 同理, X86 架构是 CISC 的一个子集。 更多面试集合可见: 高级工程师聚集地 ,助力大家更上一层楼! 2.2 常见的问题 Q1 :你所熟知的处理器架构有哪些? 我们常见的处理器架构有 ARM 、 X86 、 mips 架构等; Q2 : STM32 属于什么架构的? STM32 是 ST 公司开发的32位微控制器集成电路,基于 ARM 的 Cortex-M 系列内核。因此, STM32 属于 ARM 架构的微控制器。 Q3 : RISC 和 CISC 的区别是什么? RISC :精简指令集架构,通过简化指令集,使得大多数的操作都能够在一个指令周期内完成,提高 CPU 运行效率 CISC :复杂指令集架构,指令集丰富,能够完成一些较为复杂的任务,并且可以降低 CPU 和内存之间的通信频率,提高性能。
  • 热度 4
    2024-1-3 20:27
    1122 次阅读|
    0 个评论
    【MMC子系统】 一、MMC/SD/SDIO介绍 1、前言 该节学习Linux Kernel的MMC子系统,也称为块设备驱动,正如其名,与字符驱动相比,MMC子系统以块为单位进行操作。 同时,由于MMC Card、SD Card、SDIO Card等设备协议基本大同小异,所以在Linux Kernel中使用MMC子系统来统一管理! 2、MMC/SD/SDIO介绍 上面我们了解到,Linux Kernel使用统一的子系统模型来管理MMC、SD、SDIO等设备,那么为什么要这样设计呢? 答案当然是:三者协议有一定的共通性。 MMC(MultiMediaCard)多媒体卡设备,从本质上看, 它是一种用于固态非易失性存储的内存卡(memory card)规范,定义了诸如卡的形态、尺寸、容量、电气信号、和主机之间的通信协议等方方面面的内容。 1997年,MMC规范正式发布,至今已经进化出了SD、MicroSD、SDIO、EMMC等多种不同的规范,虽然眼花缭乱,但是追其根源,都源于MMC规范,所以Linux Kernel可以将其统一管理! mmc_sd_sdio_history MMC:强调的是多媒体存储(MM:MultiMedia) SD:强调的是安全数据(SD:Secure Digital) SDIO:强调的是IO接口(IO:Input/Output) 更多干货可见: 高级工程师聚集地 ,助力大家更上一层楼! 3、总线接口 MMC、SD、SDIO其物理接口也十分相似,我们以MMC为例进行分析。 Card Concept(eMMC) 我们的MMC卡如上图所示,内部我们不展开分析,直接将其作为一个完整的设备来分析。 其通过CLK、CMD、DATA等管脚与我们的SOC通信,两者之间当然少不了Controller了。 mmc_sd_sdio_hw_block 把通信总线部分,拿出来看 : image-20240103073934443 CLK:提供SOC和设备之间的通信时钟,常用的通信频率为400KHz(识卡)、25MHz,50MHz CMD:提供SOC和设备之间的通信命令,标识不同的命令编号,类型多达50多种。 DATA:提供SOC和设备之间的数据通信,其通信总线有8根,可自定义设置,一般默认的是1-bit (默认)模式、4-bit模式和8-bit模式。当然数据线越多,传输越快嘛,但是处理起来也稍微繁琐。 除了上面的一些管脚,当然还少不了VCC、GND等管脚喽,与其它外设不同的是,MMC类的设备,还会有一个检测引脚DET,用于检测是否存在卡设备(热插拔)。 好啦,上面我们对MMC、SD、SDIO进行简单了解,也知道了通信的常用方式与物理接口,当然其最核心在于通信的协议啦!由于协议过于复杂,我们放到后面了解。 4、参考文章 : http://www.wowotech.net/basic_tech/mmc_sd_sdio_intro.html