C語言程序介紹
【提要】本篇《C語言簡單的字符驅動程序介紹》特別為需要介紹編程學習的'朋友收集整理的,僅供參考。內容如下:
C語言是一種計算機程序設計語言,它既具有高級語言的特點,又具有彙編語言的特點。以下是小編為大家搜索整理的C語言簡單的字符驅動程序介紹。
代碼分為:makefile ,內核態程序 globALmem.c 用户態程序 user.c 功能是把一個數組排序,你也可以使用 read write函數往內存裏寫東西。
運行方法:make,產生文件, Insmod , 看一下 dmesg -c 是否有提示信息(也可以 lsmod | grep "glo"), 有的話説明加載上了,
然後 mknod /dev globalmem c 254 0 , 看一下 ls /proc/device/ | grep "glo" 有東西沒。
然後運行用户態程序,數組被排序了。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 .* *.o *.c * _versions
14
15endif
16
內核模塊
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語言程序基礎練習題帶答案
C語言傳遞參數均是以值傳遞(passbyvalue),另外也可以傳遞指針(apointerpassedbyvalue)。下面是小編為大家搜索整理的C語言專項訓練題,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!單選題1).下列關於標識符的説法中錯誤的是A.合法的標識符...
-
C語言在屏幕中顯示內容
C語言你瞭解多少呢?你知道C語言在屏幕中顯示內容是什麼樣的嗎?歡迎大家閲讀!更多相關信息請關注相關欄目!我們有兩種方式從計算機獲得信息:一是看屏幕上的文字、圖片、視頻等,二是聽從喇叭發出來的聲音。讓喇叭發出聲音目前還比較麻煩,我們先來看看如何在屏幕上顯示一...
-
C語言基礎循環結構
引導語:循環結構可以減少源程序重複書寫的工作量,用來描述重複執行某段算法的問題,這是程序設計中最能發揮計算機特長的程序結構。以下是本站小編分享給大家的C語言循環結構,歡迎閲讀學習!1.1for循環結構循環語句的一般表達式是:for(表達式1;表達式2;表達式3)語句2....
-
C語言猴子吃桃問題
猴子第一天摘了若干個桃子,當即吃了一半,還不解饞,又多吃了一個;第二天,吃剩下的桃子的一半,還不過癮,又多吃了一個;以後每天都吃前一天剩下的一半多一個,到第10天想再吃時,只剩下一個桃子了。問第一天共摘了多少個桃子?分析:1)設x1為前一天桃子數,設x2為第二天桃子數,則:x...