一、常用指令(Linux开发板上操作)
1.配置WiFi网络
# vi /etc/wpa_supplicant.conf
# cat /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
update_config=1network={
ssid="CMCC-yyc"
psk="12345678yyc"
key_mgmt=WPA-PSK
}
# wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B
【如果执行失败,查看是否有wpa_supplicant进程,有就停止:
ps aux|grep wpa_supplicant
killall wpa_supplicant】
#
udhcpc -i wlan0
2.挂载nfs
mkdir /mnt/nfs
mount -t nfs -o nolock 192.168.1.5:/home/nfs /mnt/nfs
3.配置NTP
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
验证MQTT
修改开发板的/etc/mosquitto/mosquitto.conf文件,
在#user mosquitto后加一行user root,重启开发板
mosquitto_sub -t test &
mosquitto_pub -t test -m "hello world"
看到hello world说明移植成功
二、buildroot部分修改(Linux编译系统上操作)
mqtt(mosquitto)
./build.sh buildroot_rootfs
勾选 mosquitto
NFS
./build.sh buildroot_menuconfig
buildroot配置选项中选中nfs-utils和rpcbind
./build.sh buildroot_saveconfig
NTP
Target packages --->
Networking applications --->
[*] ntp
[*] ntpd
libgpio
[*] libgpiod
[*] install tools
三、kernel部分修改(Linux编译系统上操作)
NFS
./build.sh menuconfig
<*> NFS clinet support
...3
...4
...4.1
./build.sh saveconfig
四、其他功能
RTC部分
查看开发板原理图,找到rtc芯片连接到哪个i2c,k4b连接到i2c-3
i2c地址计算,查看2C总线从地址:读,0A3H;写,0A2H 右移一位就是i2c的地址0x51
使用工具查看i2c设备是否挂载成功
root@kickpi:/mnt/nfs# dmesg -n1 #过滤日志,日志打印设置为1
root@kickpi:/mnt/nfs# i2cdetect -y 3
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- UU -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
查看加载的rtc驱动:cat /sys/bus/i2c/devices/3-0051/name hym8563
查看驱动对应的节点: root@kickpi:/mnt/nfs# cat /sys/class/rtc/rtc0/name sunxi-rtc 7090000.rtc root@kickpi:/mnt/nfs# cat /sys/class/rtc/rtc1/name rtc-hym8563 3-0051
rtc命令
hwclock -r -f /dev/rtc1 #读取RTC时间
hwclock -w -f /dev/rtc1 #设置系统时间到RTC
hwclock -s -f /dev/rtc1 #从RTC恢复系统时间
gpio部分
#查看现有gpio
root@kickpi:~# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-223, parent: platform/pio, pio:
gpio-110 ( |PD14 ) out lo
gpio-116 ( |usb1-vbus ) out hi
gpio-139 ( |PE11 ) out hi
gpio-140 ( |otg_id ) in hi
gpio-141 ( |phy-rst ) out hi
gpio-166 ( |cd ) in hi ACTIVE LOW
gpio-192 ( |PG0 ) out hi
gpio-193 ( |work-led ) out hi
gpio-204 ( |PG12 ) out hi
gpio-205 ( |PG13 ) out hi
gpio-206 ( |PG14 ) out hi
gpio-207 ( |PG15 ) out hiroot@kickpi:~# cd /sys/class/gpio/
root@kickpi:/sys/class/gpio# ls
export gpiochip0 unexport#编号计算方式---PD14=3*32+14 PE11=4*32+11
root@kickpi:/sys/class/gpio# echo 110 > export
-sh: echo: write error: Device or resource busy
说明该端口已被占用,需要到设备树注释掉此设备
修改设备树
ubuntu@ubuntu1804:~/t113-linux/kernel/linux-5.4/arch/arm/boot/dts$ vim t113-s3-kickpi-k4b-extend-gpio.dtsi
41 &leds {
42 /*PD14: PD14 {
43 gpios = <&pio PD 14 GPIO_ACTIVE_HIGH>;
44 default-state = "on";
45 };*/
再次执行
root@kickpi:~# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-223, parent: platform/pio, pio:
gpio-116 ( |usb1-vbus ) out hi
gpio-139 ( |PE11 ) out hi
gpio-140 ( |otg_id ) in hi
gpio-141 ( |phy-rst ) out hi
gpio-166 ( |cd ) in hi ACTIVE LOW
gpio-192 ( |PG0 ) out hi
gpio-193 ( |work-led ) out lo
gpio-204 ( |PG12 ) out hi
gpio-205 ( |PG13 ) out hi
gpio-206 ( |PG14 ) out hi
gpio-207 ( |PG15 ) out hi
root@kickpi:~# cd /sys/class/gpio/
root@kickpi:/sys/class/gpio# ls
export gpiochip0 unexport
root@kickpi:/sys/class/gpio# echo 110 > export
root@kickpi:/sys/class/gpio# ls
export gpio110 gpiochip0 unexport
root@kickpi:/sys/class/gpio# cd gpio110
root@kickpi:/sys/class/gpio/gpio110# ls
active_low direction power uevent waiting_for_supplier
device edge subsystem value
#写值测试[direction:out/in value:0/1]
root@kickpi:/sys/class/gpio/gpio110# echo out > direction
root@kickpi:/sys/class/gpio/gpio110# echo 1 > value
root@kickpi:/sys/class/gpio/gpio110# cat direction
out
root@kickpi:/sys/class/gpio/gpio110# cat value
1
direction文件:表示GPIO引脚的方向,它的可取值如下:in:引脚为输入模式。
out:引脚为输出模式,且默认输出电平为低。
low:引脚为输出模式,且默认输出电平为低。
high:引脚为输出模式,且默认输出电平为高。
value文件:表示GPIO的电平,1表示高电平,0表示低电平。GPIO被配置为输出 模式, 那么修改该文件的内容可以改变引脚的电平。
edge文件:用于配置GPIO的中断触发方式,当GPIO被配置为中断时,可以通过系统 的poll函数监听。edge文件可取如下的属性值:
none:没有使用中断模式。
rising:表示引脚为中断输入模式,上升沿触发。
falling:表示引脚为中断输入模式,下降沿触发。
both:表示引脚为中断输入模式,边沿触发。
Linux5.x内核使用gpio的新方法
root@kickpi:/sys/class/gpio# gpiodetect #列出所有的GPIO控制器
gpiochip0 [pio] (224 lines)
#列出gpio控制器的110引脚情况
root@kickpi:/sys/class/gpio# gpioinfo gpiochip0 | grep 110
line 110: unnamed unused output active-high
#设置gpiochip0组编号110引脚为高电平
root@kickpi:/sys/class/gpio# gpioset gpiochip0 110=1
root@kickpi:/sys/class/gpio# gpioset gpiochip0 110=0
#获取gpiochip0组编号110引脚状态
root@kickpi:/sys/class/gpio# gpioget gpiochip0 110
0#查看是否被占用
cat /sys/kernel/debug/pinctrl/*/pinmux-pins | grep PD14
五、遇到问题
/home/ubuntu/t113-linux/out/t113/evb1_auto/buildroot/buildroot/host/arm-buildroot-linux-gnueabihf/sysroot/usr/include/gpiod.h:1143:18: error: field 'ts' has incomplete type
struct timespec ts;
^把 CFLAGS 从 -std=c99 改为 -std=gnu99
即可让编译器自动带上 POSIX 扩展,从而识别 struct timespec。

被折叠的 条评论
为什么被折叠?



