Uboot和系统跑起来了,接下来就是进行驱动开发了;
Heartbeat(心跳灯)
修改设备树:
在设备树文件arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dts中;
在 / { } 所包裹的根节点目录下添加:
1 | leds { |
其中
1 | gpios = <&pio 4 12 GPIO_ACTIVE_LOW>; /* PE12 */ |
代表引脚 4 * 32 + 12也就是PE12( A~G: 0~6)
其名字为:led:usr;
系统启动后与LED控制有关的文件;
系统启动后,将看到这样的文件:
1 | $: ls /sys/class/leds/ |
这里三个文件夹分别对应设备树中定义的三个LED;
编译设备树:
可以只编译设备树,不编译其他文件;
1 | make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs -j12 |
控制LED灯亮灭:
点亮LED:
1 | $: echo 1 > /sys/class/leds/led\:usr/brightness |
熄灭LED:
1 | $: echo 0 > /sys/class/leds/led\:usr/brightness |
控制LED闪烁:
1 | $: ls /sys/class/leds/led\:usr/ |
开机自动打开心跳灯:
作为系统服务自动启动,在这个目录添加脚本文件
/etc/init.d/;作为登录用户的自动启动程序,在
/etc/profile.d/添加脚本文件;
新建脚本文件heartbeat_led.sh:
1 | echo heartbeat >/sys/class/leds/led\:usr/trigger |
将该脚本放置于 /etc/profile.d/中即可开机自动调用该脚本:
1 | : ls /etc/profile.d/ |
F1C100S GPIO操作:
1 | #使用sysfs操作GPIO的例子: |
引脚计算规则:
在Linux中,GPIO 使用0~MAX_INT之间的整数标识;
对于32位CPU,每组GPIO 32个,引脚号就是按顺序排列;
从PA0开始gpio是0,那么PE3对应是32*4+3=131,经试验已验证;
这个板子是PE12引脚为LED引脚,故:
故点灯的脚本如下:
1 | echo "out" > /sys/class/gpio/gpio140/direction #设置为输出 |
文件系统打包和解压缩(rootfs.tar):
压缩:
1 | sudo tar -cvf rootfs.tar ./ |
解压:
1 | sudo tar -xf ./rootfs.tar -C /mnt/ |
解压到SD卡中:
1 | #如果分区已挂载到别的地方先进行卸载 |
复制.so文件到系统中:
From:
1 | #虚拟机 |
To:
1 | #嵌入式Linux系统 |
有名称相同的文件,跳过即可,不能覆盖;
关机操作:
需要注意的是,在开发板运行过程中,如果想要重启,请先执行:
1 | poweroff |
命令正常关闭系统后,在按重启按钮,否则有很大概率回造成文件系统损坏;