Android 는 Tiny 4412 장치 구동 을 위해 proc 디 렉 터 리 에 읽 을 수 있 는 버 전 정 보 를 추가 하 는 파일 입 니 다.

4.567915.상단 에서 우 리 는 proc 파일 시스템 의 역할 을 알 게 되 었 습 니 다.그 다음 에 우 리 는 이미 작 성 된 led 드라이브 를 바탕 으로 proc 디 렉 터 리 에 폴 더 를 만 든 다음 에 led 드라이브 의 버 전 정 보 를 추가 하여 읽 습 니 다.
우 리 는 init 함수 의 마지막 가입:

//  proc      
struct proc_dir_entry *dev_dir , *dev_version;
//      
dev_dir = proc_mkdir("Tiny4412_leds", NULL); 
//      
dev_version = create_proc_entry("version", S_IRUGO, dev_dir); 
//        
dev_version->read_proc = proc_read_version ;
그리고 버 전 정 보 를 가 져 오 는 읽 기 함 수 를 작성 합 니 다:

#define VERSION_LEN 20
char Tiny4412_LED_version[VERSION_LEN] = "20170908
"; int proc_read_version(char *page, char **start, off_t off, int count, int *eof, void *data) { int len ; len = sprintf(page,Tiny4412_LED_version); // page, copy return len ; }
큰 성 과 를 거두다.
다음 컴 파일 이 완료 되 었 습 니 다.kenel 을 개발 판 에 넣 은 후 카드 기 는 adb 셸 로 들 어가 면 다음 과 같 습 니 다.

수 정 된 원본 코드:

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/miscdevice.h>
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/moduleparam.h>
#include <linux/slab.h>
#include <linux/ioctl.h>
#include <linux/cdev.h>
#include <linux/delay.h>
#include <linux/gpio.h>
#include <mach/gpio.h>
#include <plat/gpio-cfg.h>
//        
#include <linux/proc_fs.h>
#include <linux/uaccess.h>
#define DEVICE_NAME "leds"
static int led_gpios[] = {
 EXYNOS4212_GPM4(0),
 EXYNOS4212_GPM4(1),
 EXYNOS4212_GPM4(2),
 EXYNOS4212_GPM4(3),
};
#define LED_NUM ARRAY_SIZE(led_gpios)
static long tiny4412_leds_ioctl(struct file *filp, unsigned int cmd,
 unsigned long arg)
{
 switch(cmd) {
 case 0:
 case 1:
  if (arg > LED_NUM) {
  return -EINVAL;
  }
  gpio_set_value(led_gpios[arg], !cmd);
  //printk(DEVICE_NAME": %d %d
", arg, cmd); break; default: return -EINVAL; } return 0; } static struct file_operations tiny4412_led_dev_fops = { .owner = THIS_MODULE, .unlocked_ioctl = tiny4412_leds_ioctl, }; static struct miscdevice tiny4412_led_dev = { .minor = MISC_DYNAMIC_MINOR, .name = DEVICE_NAME, .fops = &tiny4412_led_dev_fops, }; #define VERSION_LEN 20 char Tiny4412_LED_version[VERSION_LEN] = "20170908
"; int proc_read_version(char *page, char **start, off_t off, int count, int *eof, void *data) { int len ; len = sprintf(page,Tiny4412_LED_version); return len ; } static int __init tiny4412_led_dev_init(void) { int ret; int i; for (i = 0; i < LED_NUM; i++) { ret = gpio_request(led_gpios[i], "LED"); if (ret) { printk("%s: request GPIO %d for LED failed, ret = %d
", DEVICE_NAME, led_gpios[i], ret); return ret; } s3c_gpio_cfgpin(led_gpios[i], S3C_GPIO_OUTPUT); gpio_set_value(led_gpios[i], 1); } // ret = misc_register(&tiny4412_led_dev); // proc struct proc_dir_entry *dev_dir , *dev_version; // dev_dir = proc_mkdir("Tiny4412_leds", NULL); // dev_version = create_proc_entry("version", S_IRUGO, dev_dir); // dev_version->read_proc = proc_read_version ; printk(DEVICE_NAME"\tinitialized
"); return ret; } static void __exit tiny4412_led_dev_exit(void) { int i; for (i = 0; i < LED_NUM; i++) { gpio_free(led_gpios[i]); } misc_deregister(&tiny4412_led_dev); } module_init(tiny4412_led_dev_init); module_exit(tiny4412_led_dev_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("FriendlyARM Inc & Y.X.YANG modify");
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.

좋은 웹페이지 즐겨찾기