<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. C語言

    C語言程序介紹

    時間:2025-03-01 19:07:04 C語言 我要投稿

    C語言程序介紹

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

      C語言是一種計算機程序設計語言,它既具有高級語言的特點,又具有匯編語言的特點。以下是小編為大家搜索整理的C語言簡單的字符驅動程序介紹。

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

      運行方法:

      make,產生globalmem.ko文件, Insmod globalmem.ko , 看一下 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 .*.cmd *.o *.mod.c *.ko .tmp_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語言程序試題04-26

    c語言入門經典程序08-01

    C語言經典程序題09-17

    c語言鏈接程序08-26

    C語言程序實例10-10

    C語言程序的段06-14

    c語言入門的經典程序07-25

    C語言程序的實現09-27

    C語言程序分析08-27

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人