亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

C語言 百分網(wǎng)手機(jī)站

C語言程序介紹

時間:2020-11-23 17:28:36 C語言 我要投稿

C語言程序介紹

  【提要】本篇《C語言簡單的字符驅(qū)動程序介紹》特別為需要介紹編程學(xué)習(xí)的朋友收集整理的,僅供參考。內(nèi)容如下:

  C語言是一種計(jì)算機(jī)程序設(shè)計(jì)語言,它既具有高級語言的特點(diǎn),又具有匯編語言的特點(diǎn)。以下是小編為大家搜索整理的.C語言簡單的字符驅(qū)動程序介紹。

  代碼分為:makefile ,內(nèi)核態(tài)程序 globalmem.c 用戶態(tài)程序 user.c 功能是把一個數(shù)組排序,你也可以使用 read write函數(shù)往內(nèi)存里寫東西。

  運(yùn)行方法:

  make,產(chǎn)生globalmem.ko文件, Insmod globalmem.ko , 看一下 dmesg -c 是否有提示信息(也可以 lsmod | grep "glo"), 有的話說明加載上了,

  然后 mknod /dev globalmem c 254 0 , 看一下 ls /proc/device/ | grep "glo" 有東西沒。

  然后運(yùn)行用戶態(tài)程序,數(shù)組被排序了。dmesg -c 可以看到提示信息, 在模塊中排序了。

  上代碼(是帶鎖的代碼,順便練練手)

  makefile

  1# makefile for kernel 2.6

  2ifneq ($(KERNELRELEASE),)

  3#mymodule-objs := file1.o file2.o

  4obj-m := globalmem.o

  5

  6else

  7PWD := $(shell pwd)

  8KVER := $(shell uname -r)

  9KDIR := /lib/modules/$(KVER)/build

  10all:

  11 $(MAKE) -C $(KDIR) M=$(PWD)

  12clean:

  13 rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions

  14

  15endif

  16

  內(nèi)核模塊

  1#include

  2#include

  3#include

  4#include

  5#include

  6#include

  7#include

  8#include

  9#include

  10#include

  11#include "mem.h"

  12

  13#define GLOBALMEM_SIZE 0x1000

  14#define MEM_CLEAR 0x1

  15#define ARRAY_INSTER 0x2

  16#define GLOBALMEM_MAJOR 254

  17

  18static int globalmem_major = GLOBALMEM_MAJOR;

  19

  20//the struct of global

  21typedef struct __globalmem_dev{

  22 struct cdev cdev;

  23 unsigned char mem[GLOBALMEM_SIZE];

  24 //add lock, signal

  25 struct semaphore sem;

  26 atomic_t ato;

  27}globalmem_dev;

  28

  29globalmem_dev * global;

  30

  31typedef struct __arithmetic_st{

  32 int buf[10];

  33 int len;

  34}arithmetic_st;

  35

  36

  37

  38

  39int globalmem_open(struct inode *inode, struct file * filp)

  40{

  41 filp->private_data = global;

  42 //you can only open one file

  43 if(!atomic_dec_and_test(&global->ato))

  44 {

  45 printk( KERN_NOTICE "atomic is lock ");

  46 return -EBUSY;

  47 }

  48 return 0;

  49}

  50

  51int globalmem_release(struct inode * inode, struct file * filp)

  52{

  53 atomic_inc(&global->ato);

  54 return 0;

  55}

  56

  57

  58//read

  59static ssize_t globalmem_read(struct file * filp, char __user *buf, size_t size, loff_t *ppos)

  60{

  61 unsigned long p = *ppos;

  62 unsigned int count = size;

  63 int ret = 0;

  64

  65 globalmem_dev *dev = filp->private_data;

  66

  67 if(p > GLOBALMEM_SIZE)

  68 return count ? -ENXIO : 0;

【C語言程序介紹】相關(guān)文章:

1.c語言鏈接程序

2.C語言經(jīng)典程序題

3.C語言程序的段

4.C語言程序基礎(chǔ)知識

5.C語言程序的存儲區(qū)域

6.c語言入門的經(jīng)典程序

7.Linux下編譯C語言程序