OpenWRT(八)应用层开发

简介: OpenWRT教程

OpenWRT版本:17
 

一、应用层和kernel层

很多人都是学习完单片机后才开始学嵌入式Linux的,刚开始学时都不能理解为什么写两个程序才能点亮LED,以前单片机只要写一个程序进去LED就可以控制了啊?这就是操作系统带来的分层思想。其实我们也可以直接在驱动中直接控制,但是这就失去了操作系统的意义了。

驱动程序是在kernel层,应用程序是在应用层。两者关系:
应用——》驱动 (调用驱动去操作底层硬件)

二、应用程序实例

用例子最能解释清楚知识了,我们该应用程序是调用上一节的字符驱动程序的。下面的内容以后可以作为模板使用。

1、在package文件夹下新建一个chardrv_app文件夹
2、在chardrv_app文件夹下新建一个Makefile文件,内容如下:

#
# Copyright (C) 2009-2010 Jo-Philipp Wich <xm@subsignal.org>
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk

PKG_NAME:=chardrv_app
PKG_RELEASE:=9

PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)

include $(INCLUDE_DIR)/package.mk

define Package/chardrv_app
  SECTION:=utils
  CATEGORY:=Utilities
  TITLE:=CharDrv_app
  DEPENDS:=+libncurses
endef

define Package/chardrv_app/description
 This package contains an character driver.
endef

define Build/Prepare
    mkdir -p $(PKG_BUILD_DIR)
    $(CP) ./src/* $(PKG_BUILD_DIR)/
endef

define Build/Configure
endef

define Build/Compile
    $(MAKE) -C $(PKG_BUILD_DIR) \
        CC="$(TARGET_CC)" \
        CFLAGS="$(TARGET_CFLAGS) -Wall" \
        LDFLAGS="$(TARGET_LDFLAGS)"
endef

define Package/chardrv_app/install
    $(INSTALL_DIR) $(1)/usr/sbin
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/chardrv_app $(1)/usr/sbin/
endef

$(eval $(call BuildPackage,chardrv_app))

上面的Makefile和驱动的Makefile基本相似,可以从package中找一下其他模块的Makefile来进行修改,我上面的是使用nvram的Makefile进行修改的。

3、在chardrv_app文件夹下新建一个src文件夹,在src下新建一个Makefile文件,内容为:

all: chardrv_app
OBJS = chardrv_app.o

CC = gcc
CCFLAGS = -Wall -c -o

%.o: %.c
    $(CC) $(CCFLAGS) $@ $< $(LDFLAGS)

chardrv_app: $(OBJS)
    $(CC) -o $@ $(OBJS) $(LDFLAGS)

clean:
    rm -f rbcfg *.o

4、在src下新建chardrv_app.c文件。内容如下:

#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>

int main(int argc , char** argv)
{
    //设备句柄
    int fd;
    int num = 1;

    //打开驱动模块
    fd = open("/dev/chardrv" , O_RDWR|O_NONBLOCK);
    if(fd < 0)
    {
        printf("can't open /dev/chardrv\n");
        return -1;
    }

    //函数测试
    write(fd,&num,1);
    read(fd,&num,1);
    ioctl(fd,1,1);
    close(fd);
    
    return 0;
}

5、make menuconfig将模块选中
1.png

2.png

6、依次执行下面语句进行编译
make package/chardrv_app/compile V=99
make package/chardrv_app/install V=99
make package/index V=99

编译出来的文件在openwrt/bin/ramips/packages/base/下,文件名
chardrv_app_9_ramips_24kec.ipk

7、将编译好的固件放到开发板上,然后按照下面的图片进行测试。
3.png

三、出现的问题及解决方法

安装应用时出现下面的问题:
4.png

解决方法: 重新使用make V=99编译openwrt固件,然后下载到开发板上。上面的问题主要是固件是之前的,不是最新的。要先编译驱动和应用程序后再重新编译路由固件,否则会出现这个问题。

*编译时如果出现权限不够时,要加上sudo,这样就可以编译通过了。

相关文章
|
关系型数据库 芯片
ovp过压过流保护芯片,大电流限流,高压,选型大齐全
本文介绍了过压保护(OVP)和过流限流保护(OCP)的基本概念及其应用场景,如蓝牙耳机、充电宝等。文中推荐了几款平芯微的OVP/OCP保护芯片,包括单OVP芯片PW1600、W2609A、PW2605,以及OVP和OCP二合一的PW1605、PW1558A、PW1515等,详细列出了各芯片的主要特点和适用范围。
ovp过压过流保护芯片,大电流限流,高压,选型大齐全
|
存储 弹性计算 安全
阿里云服务器2核4G、4核8G、8核16G实例选型指南:经济型、通用算力型和计算型选择参考
2核4G/4核8G/8核16G配置的云服务器在阿里云目前的活动中有经济型e、通用算力型u1和计算型c7、计算型c8y、计算型c7a等计算型实例可选,虽然配置相同,但是这些实例规格之间的性能和价格差别是很大的,因此,我们有必要弄清楚他们之间的差别,这样才能根据自己的需求选择最适合自己的实例。
阿里云服务器2核4G、4核8G、8核16G实例选型指南:经济型、通用算力型和计算型选择参考
|
缓存 NoSQL 中间件
用golang搭建springboot风格项目结构 gin+gorm
最近学了学go语言,想练习一下用go开发web项目,项目结构弄个什么样呢。
|
域名解析 运维 网络协议
使用ACME CA为ASM网关签发证书
阿里云服务网格ASM提供全托管式服务网格平台,兼容Istio开源服务网格,简化服务治理,包括流量管理、认证安全和可观测性。产品文档:[https://help.aliyun.com/zh/asm](https://help.aliyun.com/zh/asm)。本文指导如何使用cert-manager和ACME CA为ASM网关获取HTTPS证书,涉及ACME协议、挑战验证及Let's Encrypt的使用。
564 2
|
芯片 关系型数据库
工程师首选:USB过压保护OVP芯片,40V-70V耐压,电流0.5A-6A
平芯微推出一系列集成保护功能的电源管理芯片,包括PW2605、PW2606B、PW2606、PW2609A、PW1600、PW1515、PW1605、PW1558A、PW2601、PW1555A、PW4054H、PW4057H和PW4056HH。这些芯片具备输入过压关闭保护,防止高压输入损坏电路,并提供不同电流等级的输出支持,部分型号还具有可调限流和内置LDO功能。产品适用于各种应用场景,如磁吸充电线、锂电池充电等。其中,PW系列芯片的过压保护点可调,且部分型号具有高耐压特性,以增强系统安全性。
|
存储 缓存 算法
交换机转发机制:存储转发与直通转发
交换机转发机制:存储转发与直通转发
2417 1
|
编解码 编译器 C语言
【FFmpeg】ffmpeg 命令查询一 ( 版本 | 编译配置 | 复用格式 | 编解码器 )(一)
【FFmpeg】ffmpeg 命令查询一 ( 版本 | 编译配置 | 复用格式 | 编解码器 )(一)
2814 0
【FFmpeg】ffmpeg 命令查询一 ( 版本 | 编译配置 | 复用格式 | 编解码器 )(一)
|
数据库
阿里云个人实名和企业实名图文详解
如大家所知,如果你需要使用阿里云的产品,比如服务器,或者域名,或者数据库,则需要注册阿里云账号和实名阿里云账号。下面就由小编和大家系统讲解一下,如何操作。
|
数据采集 物联网 大数据
阿里云在ECOC2023会议上发表多个报告和论文
阿里云在ECOC2023会议上发表多个报告和论文