Commit fc876e6c authored by Pavel Vainerman's avatar Pavel Vainerman

initial commit

parents
obj-m += charbridge.o
#!/bin/sh
#kversion=2.6.16
#kversion=2.6.12
kversion=2.6.28
flavour=lks-wks
. /usr/src/linux-$kversion-$flavour/gcc_version.inc
PWD=`pwd`
#make -C /usr/src/linux SUBDIRS=$PWD V=1 modules
make -C /usr/src/linux-$kversion-$flavour SUBDIRS=$PWD V=1 modules
# ..
#gcc -o ioctl ioctl.c
This diff is collapsed. Click to expand it.
/*
* charbridge.h - ioctl.
*
* , , ,
* (charbridge.c),
* (ioctl.c)
*/
#ifndef CHARBRIDGE_H
#define CHARBRIDGE_H
#include <linux/ioctl.h>
/*
* . ioctl,
* ,
* .
*/
#define MAJOR_NUM 255
/*
* ""
* ( )
* .. , sideA
* 0..99, sideB 100...199
* "" 100!
*/
#define MAX_DEV 10
#define MAX_PAIR 100
// 0..99 - sideA0...sideA99
// 100..199 - sideB0...sideB99
/*
*
*/
#define IOCTL_SET_MSG _IOR(MAJOR_NUM, 0, char *)
/*
* _IOR ,
*
*
* , MAJOR_NUM -- .
*
* --
* ( ).
*
* -- ,
*/
/*
*
*/
#define IOCTL_GET_MSG _IOR(MAJOR_NUM, 1, char *)
/*
* IOCTL .
* ,
* , .
*/
/*
* n-
*/
#define IOCTL_GET_NTH_BYTE _IOWR(MAJOR_NUM, 2, int)
/*
* IOCTL , .
* (n),
* n- (Message[n]).
*/
/*
*
*/
#define DEVICE_FILE_NAME "cbside"
//#define DEV1_NAME "/dev/cbsideA"
//#define DEV2_NAME "/dev/cbsideB"
#endif
/*
* ioctl.c - , ioctl
*
* cat, / .
* , ioctl.
*/
/*
* ioctl
*/
#include "charbridge.h"
#include <fcntl.h> /* open */
#include <unistd.h> /* exit */
#include <sys/ioctl.h> /* ioctl */
#include <errno.h>
/*
* ioctl
*/
ioctl_set_msg(int file_desc, char *message)
{
int ret_val;
ret_val = ioctl(file_desc, IOCTL_SET_MSG, message);
if (ret_val < 0) {
printf(" ioctl_set_msg: %d\n", ret_val);
exit(-1);
}
}
ioctl_get_msg(int file_desc)
{
int ret_val;
char message[100];
/*
* - --
* , .
*
* ioctl :
*
*/
ret_val = ioctl(file_desc, IOCTL_GET_MSG, message,sizeof(message));
if (ret_val < 0) {
printf(" ioctl_get_msg: %d\n", ret_val);
exit(-1);
}
printf(" (get_msg): %s\n", message);
}
ioctl_get_nth_byte(int file_desc)
{
int i;
char c;
printf("N- (get_nth_byte): ");
i = 0;
while (c != 0) {
c = ioctl(file_desc, IOCTL_GET_NTH_BYTE, i++);
if (c < 0) {
printf
(" ioctl_get_nth_byte %d- .\n", i);
exit(-1);
}
putchar(c);
}
putchar('\n');
}
/*
* Main - ioctl
*/
main()
{
int file_desc, ret_val;
char *msg = " ioctl\n";
// file_desc = open(DEVICE_FILE_NAME, 0);
file_desc = open("/dev/cbsideA", 0);
if (file_desc < 0) {
printf(" : %s\n", DEVICE_FILE_NAME);
printf("With error(%d): %s\n", errno, strerror(errno));
exit(-1);
}
ioctl_set_msg(file_desc, msg);
ioctl_get_msg(file_desc);
ioctl_get_nth_byte(file_desc);
close(file_desc);
}
#!/bin/sh
for num in `seq 0 9`; do
numB=`echo $num+100 | bc`
mknod /dev/cbsideA$num c 254 $num
mknod /dev/cbsideB$num c 254 $numB
chmod 'a+rw' /dev/cbsideA$num /dev/cbsideB$num
done
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment