人啊,有无线的就不想用有线的了,板子上带了wifi,就不想折腾有线网卡了。
这一节实现通过c函数开启wifi。
研究了下官方提供的cmd测试程序,里面是一个脚本文件fltest_wifi.sh,执行的时候附带ssid和password并指定节点名就可以连接了,示例如下:
fltest_wifi.sh -i wlan0 -s H3C_708 -p 12345678
- -i表示无线网卡节点名
- -s表示要连接的wifi名
- -p表示要连接的wifi密码
连接上之后可以试着ping 百度和主机ip确定是否ok
ping百度成功
开发板ping主机失败
主机ping开发板成功
猜测可能是主机防火墙问题,将主机防火墙关闭,ps应该是设置过滤规则就可以的,这里为了方便就直接关闭防火墙了。
关闭主机防火墙后再ping开发板就通了。
--------------------------------分割线----------------------------
以上是在命令窗口通过shell命令实现的,相当于先验证了通路并确保链路是正常的可以实现的,下面就通过c函数进行实现wifi连接
上面已经说了官方的wifi测试是shell 脚本命令实现的,关键还没断开wifi的命令。物理吐槽
要实现预定功能就要新建wifi.c以及Makefile
如下给出简要的测试代码
Makefile.c
CC=/home/long/work/OKT527/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/aarch64-none-linux-gnu-gcc
CFLAGS=-Wall -I.
LDFLAGS=
SRCS=$(wildcard *.c)
OBJS=$(SRCS:.c=.o)
TARGET=app
all: $(TARGET)
$(TARGET): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
clean:
rm -f $(OBJS) $(TARGET)
help:
[url=home.php?mod=space&uid=70594]@echo[/url] "make - 编译所有源文件并生成可执行文件 $(TARGET)"
@echo "make clean - 清理编译生成的文件"
.PHONY: clean help
wifi.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int status = system("fltest_wifi.sh -i wlan0 -s CMCC-p3Hp -p xh5mbggl");
if (status == -1)
{
printf("system() failed");
return 1;
}
else if (WIFEXITED(status))
{
printf("Command exited with status %d\\n", WEXITSTATUS(status));
}
else
{
printf("Command was interrupted by a signal\\n");
}
return 0;
}
这里只是一个简单的demo,先实现通过应用程序连接wifi,后面再完善其他功能。
通过交叉编译链编译生成app,将其拷贝到开发板,最简单的方式就是通过adb push命令将其推送到开发板的指定目录。不过这需要另外一根usb-typec线连接主机usb和开发板的usb0口,另外一根串口线也不要拔掉,可以看日志和执行app,当然在adb shell界面也可以执行app。我这里usb0主要用于推送文件到开发板,在串口界面执行命令并打印log。
我将其推送到了/home/forlinx目录下。
在该目录下执行如下命令,即可运行app程序了
chmod +x app
./app
至此完成初步实验,可以在c程序中进行wifi连接,同时也可以修改要连接的wifi名称和密码,以便后续功能实现。
|