LINUX学习笔记:(1)编写应用程序

LINUX学习笔记:(1)编写应用程序

宿主机 : 虚拟机 Ubuntu 16.04 LTS / X64
目标板[底板]: Tiny4412SDK - 1506
目标板[核心板]: Tiny4412 - 1412
LINUX内核: 4.12.0
交叉编译器: arm-none-linux-gnueabi-gcc(gcc version 4.8.3 20140320)
日期: 2018-2-28 19:23:15
作者: SY

简介

本章节主要介绍如何编写应用程序运行在基于 ARMLinux 上。对于 Linux 来说一切设备皆文件,比如开发板上的 LED ,在驱动程序中可以设定文件名为 LED ,存放在 /dev 目录中。可以使用 openioctl 等函数读写。

APP

led.c

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

#define CMD_LED_ON      (0)
#define CMD_LED_OFF     (1)

#define DEVICE_PATH     "/dev/LED"

static void usage( const char *module_name )
{
    printf("usage:\n");
    printf("%s <led_num> <on/off>\n",module_name);
    printf("led_num = 1, 2, 3, 4\n");
}

enum
{
    DEVICE_OFF = 0,
    DEVICE_ON,
    DEVICE_ERR,
};

int main(int argc, char **argv)
{
    int fd;
    int led_num;
    int device_status = DEVICE_ERR; 

    if (argc != 3) {
        goto exception;
    }

    sscanf(argv[1],"%d",&led_num);
    led_num -= 1;   

    if (strcmp(argv[2],"on") == 0) {
        device_status = DEVICE_ON;
    } else if (strcmp(argv[2],"off") == 0) {
        device_status = DEVICE_OFF;
    }

    if ( (led_num < 0) || (led_num > 3) ||  (device_status == DEVICE_ERR) ) {
        goto exception;
    }

    fd = open(DEVICE_PATH,O_WRONLY);
    if (fd < 0) {
        printf("open %s error!\n",DEVICE_PATH);

        return 1;
    }

    if (device_status == DEVICE_ON) {
        ioctl(fd, CMD_LED_ON, led_num);
    } else {
        ioctl(fd, CMD_LED_OFF, led_num);
    }

    close(fd);

    return 0;

exception:
{
    usage(argv[0]);

    return 1;
}

}

Makefile

Makefile

CC          = arm-linux-gcc
CFLAGS      = -Wall

TARGET      = led
SOURCE      = led.c

$(TARGET) : $(SOURCE)
    $(CC) $(CFLAGS) -o $@ $<

clean:
    rm -rf *.o $(TARGET)

编译

在当前目录下使用:

$ make 

即可生成可执行文件 led

测试

将文件拷贝到开发板中:

$ ./led 1 on

LED1 打开。

$ ./led 2 off

LED2 关闭。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值