Skip to content
Snippets Groups Projects
Commit 175de2a0 authored by ParkHyeonJin's avatar ParkHyeonJin
Browse files

First

parents
No related branches found
No related tags found
No related merge requests found
Showing
with 405 additions and 0 deletions
File added
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/sysmacros.h>
#define FIRE_MAJOR_NUMBER 500
#define FIRE_MINOR_NUMBER 100
#define FIRE_DEV_PATH_NAME "/dev/fire_detect"
#define SMOKE_MAJOR_NUMBER 501
#define SMOKE_MINOR_NUMBER 101
#define SMOKE_DEV_PATH_NAME "/dev/smoke_detect"
#define MAXLINE 511
#define PORT 65021
int main(int argc, char* argv[]){
int cli_sock;
struct sockaddr_in serv_addr;
int datalen;
char buf[MAXLINE +1];
int nbytes;
char* addrserv;
int nport;
struct hostent *host_ent;
if (argc == 2){
addrserv = argv[1];
nport = PORT;
}
dev_t fire_detect, smoke_detect;
int fire_fd, smoke_fd;
int fire_detection=0;
int smoke_detection=0;
//fire_detect = makedev(FIRE_MAJOR_NUMBER,FIRE_MINOR_NUMBER);
//mknod(FIRE_DEV_PATH_NAME, S_IFCHR|0666, fire_detect);
smoke_detect = makedev(SMOKE_MAJOR_NUMBER,SMOKE_MINOR_NUMBER);
mknod(SMOKE_DEV_PATH_NAME, S_IFCHR|0666, smoke_detect);
//fire_fd = open(FIRE_DEV_PATH_NAME, O_RDWR);
smoke_fd = open(SMOKE_DEV_PATH_NAME, O_RDWR);
if(smoke_fd < 0)
{
//if(fire_fd < 0) printf("fail to open fire\n");
if(smoke_fd < 0) printf("fail to open smoke\n");
return -1;
}
cli_sock = socket(PF_INET, SOCK_STREAM, 0); // open socket
if (cli_sock == -1){
perror("socket() error!\n");
return -1;
}
// addrserv: abc.der.com type and 192.168.0.xx type
if (strncmp(addrserv, "192.168.", 8) != 0){
if ((host_ent = gethostbyname(addrserv)) == NULL) {
herror("gethostbyname() error\n");
}
//sprintf(addrserv,"%s\n", ((struct in_addr *)host_ent->h_addr_list[0]));
addrserv = inet_ntoa(*((struct in_addr *)host_ent->h_addr_list[0]));
}
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET; //default
serv_addr.sin_addr.s_addr = inet_addr(addrserv); //server address
serv_addr.sin_port = htons(nport); //server port to connect
if (connect(cli_sock, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1) { //connect to serve
perror("connect() error\n");
exit(0);
}
pid_t pid;
if((pid = fork()) == -1){
perror("fork() error\n");
exit(0);
} else if(pid ==0) { //child process : write data to server from stdin
while(1){
//read(fire_fd, &fire_detection, 4);
read(smoke_fd, &smoke_detection, 4);
sprintf(buf, "%d", smoke_detection);
char temp[10] = "G:";
strcat(temp,buf);
printf("%s\n",temp);
strcat(temp,"ppm");
int len = strlen(temp);
temp[len]='\0';
write(cli_sock, temp, len);
/*if(fire_detection == 0){
//temp[0]='\0';
strcpy(temp,"F");
len = strlen(temp);
temp[len]='\0';
write(cli_sock, temp, len);
} */
sleep(4);
}
} else if (pid > 0){ //parent process : read data from server and output to stdout
while(1){
if((nbytes = read(cli_sock, buf, MAXLINE)) < 0){ //read string from client through socket
perror("read() error\n");
exit(0);
}
//printf("%s\n", buf); //output string from client to stdout
if(strncmp(buf, "exit",4) == 0)
exit(0);
}
}
close(fire_fd);
close(smoke_fd);
close(cli_sock);
return 0;
}
File added
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/sysmacros.h>
#define FIRE_MAJOR_NUMBER 500
#define FIRE_MINOR_NUMBER 100
#define FIRE_DEV_PATH_NAME "/dev/fire_detect"
#define SMOKE_MAJOR_NUMBER 501
#define SMOKE_MINOR_NUMBER 101
#define SMOKE_DEV_PATH_NAME "/dev/smoke_detect"
#define MAXLINE 511
#define PORT 65021
int main(int argc, char* argv[]){
int cli_sock;
struct sockaddr_in serv_addr;
int datalen;
char buf[MAXLINE +1];
int nbytes;
char* addrserv;
int nport;
struct hostent *host_ent;
if (argc == 2){
addrserv = argv[1];
nport = PORT;
}
dev_t fire_detect, smoke_detect;
int fire_fd, smoke_fd;
int fire_detection=0;
int smoke_detection=0;
fire_detect = makedev(FIRE_MAJOR_NUMBER,FIRE_MINOR_NUMBER);
mknod(FIRE_DEV_PATH_NAME, S_IFCHR|0666, fire_detect);
//smoke_detect = makedev(SMOKE_MAJOR_NUMBER,SMOKE_MINOR_NUMBER);
//mknod(SMOKE_DEV_PATH_NAME, S_IFCHR|0666, smoke_detect);
fire_fd = open(FIRE_DEV_PATH_NAME, O_RDWR);
//smoke_fd = open(SMOKE_DEV_PATH_NAME, O_RDWR);
if(fire_fd < 0 )
{
if(fire_fd < 0) printf("fail to open fire\n");
//if(smoke_fd < 0) printf("fail to open smoke\n");
return -1;
}
cli_sock = socket(PF_INET, SOCK_STREAM, 0); // open socket
if (cli_sock == -1){
perror("socket() error!\n");
return -1;
}
// addrserv: abc.der.com type and 192.168.0.xx type
if (strncmp(addrserv, "192.168.", 8) != 0){
if ((host_ent = gethostbyname(addrserv)) == NULL) {
herror("gethostbyname() error\n");
}
//sprintf(addrserv,"%s\n", ((struct in_addr *)host_ent->h_addr_list[0]));
addrserv = inet_ntoa(*((struct in_addr *)host_ent->h_addr_list[0]));
}
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET; //default
serv_addr.sin_addr.s_addr = inet_addr(addrserv); //server address
serv_addr.sin_port = htons(nport); //server port to connect
if (connect(cli_sock, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1) { //connect to serve
perror("connect() error\n");
exit(0);
}
pid_t pid;
if((pid = fork()) == -1){
perror("fork() error\n");
exit(0);
} else if(pid ==0) { //child process : write data to server from stdin
while(1){
read(fire_fd, &fire_detection, 4);
//read(smoke_fd, &smoke_detection, 4);
if(fire_detection == 0){
//temp[0]='\0';
strcpy(buf,"F");
int len = strlen(buf);
buf[len+1]='\0';
printf("%s\n",buf);
write(cli_sock, buf, len);
}
sleep(4);
}
} else if (pid > 0){ //parent process : read data from server and output to stdout
while(1){
if((nbytes = read(cli_sock, buf, MAXLINE)) < 0){ //read string from client through socket
perror("read() error\n");
exit(0);
}
//printf("%s\n", buf); //output string from client to stdout
if(strncmp(buf, "exit",4) == 0)
exit(0);
}
}
close(fire_fd);
//close(smoke_fd);
close(cli_sock);
return 0;
}
cmd_/home/pi/das/fire/fire_detect_dev.ko := ld -r -EL -T ./scripts/module-common.lds -T ./arch/arm/kernel/module.lds --build-id -o /home/pi/das/fire/fire_detect_dev.ko /home/pi/das/fire/fire_detect_dev.o /home/pi/das/fire/fire_detect_dev.mod.o ; true
This diff is collapsed.
This diff is collapsed.
/home/pi/das/fire/fire_detect_dev.ko
/home/pi/das/fire/fire_detect_dev.o
KERNEL_DIR = '/lib/modules/4.19.118-v7+/build'
obj-m := fire_detect_dev.o
PWD := $(shell pwd)
all :
make -C $(KERNEL_DIR) M=$(PWD) modules
clean :
make -C $(KERNEL_DIR) M=$(PWD) clean
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/slab.h>
#include <linux/delay.h>
#include <linux/ktime.h>
#include <asm/mach/map.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#define MAJOR_NUMBER 500
#define DEV_NAME "fire_detect"
#define GPIO_BASE_ADDR 0x3F200000
#define GPFSEL2 0x08 //for GPIO 20, 21
#define GPSET0 0x1C
#define GPCLR0 0x28
#define GPLEV0 0x34
static void __iomem *gpio_base;
volatile unsigned int *gpset1;
volatile unsigned int *gpclr1;
volatile unsigned int *gpsel2;
volatile unsigned int *gplev0;
int FD_open(struct inode *inode, struct file *filp) {
printk(KERN_ALERT "fire_detect Sensor driver open!!\n");
gpio_base = ioremap(GPIO_BASE_ADDR, 0x60);
gpsel2 = (volatile unsigned int *)(gpio_base + GPFSEL2);
gpset1 = (volatile unsigned int *)(gpio_base + GPSET0);
gpclr1 = (volatile unsigned int *)(gpio_base + GPCLR0);
gplev0 = (volatile unsigned int *)(gpio_base + GPLEV0);
return 0;
}
int FD_release(struct inode *inode, struct file *filp) {
printk(KERN_ALERT "fire_detect Sensor driver closed!!\n");
iounmap((void*)gpio_base);
return 0;
}
ssize_t FD_read(struct file *filp, char *buf, size_t size, loff_t *f_pos) {
unsigned int input = *gplev0 & (1<<20); //GPIO 20 input
copy_to_user(buf, &input, 4);
return size;
}
static struct file_operations FD_fops = {
.owner = THIS_MODULE,
.read = FD_read,
.open = FD_open,
.release = FD_release,
};
int __init FD_init(void) {
if(register_chrdev(MAJOR_NUMBER, DEV_NAME, &FD_fops) < 0)
printk(KERN_ALERT "fire_detect Sensor driver init failed\n");
else
printk(KERN_ALERT "fire_detect Sensor driver init successful\n");
return 0;
}
void __exit FD_exit(void) {
unregister_chrdev(MAJOR_NUMBER, DEV_NAME);
printk(KERN_ALERT "fire_detect Sensor driver cleanup\n");
}
module_init(FD_init);
module_exit(FD_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("PHJ");
MODULE_DESCRIPTION("fire_detect");
File added
#include <linux/build-salt.h>
#include <linux/module.h>
#include <linux/vermagic.h>
#include <linux/compiler.h>
BUILD_SALT;
MODULE_INFO(vermagic, VERMAGIC_STRING);
MODULE_INFO(name, KBUILD_MODNAME);
__visible struct module __this_module
__attribute__((section(".gnu.linkonce.this_module"))) = {
.name = KBUILD_MODNAME,
.init = init_module,
#ifdef CONFIG_MODULE_UNLOAD
.exit = cleanup_module,
#endif
.arch = MODULE_ARCH_INIT,
};
#ifdef CONFIG_RETPOLINE
MODULE_INFO(retpoline, "Y");
#endif
static const struct modversion_info ____versions[]
__used
__attribute__((section("__versions"))) = {
{ 0x9b929f65, "module_layout" },
{ 0x6bc3fbc0, "__unregister_chrdev" },
{ 0xbfca880a, "__register_chrdev" },
{ 0xdb7305a1, "__stack_chk_fail" },
{ 0xf4fa543b, "arm_copy_to_user" },
{ 0x8f678b07, "__stack_chk_guard" },
{ 0xedc03953, "iounmap" },
{ 0x2e5810c6, "__aeabi_unwind_cpp_pr1" },
{ 0xe97c4103, "ioremap" },
{ 0x7c32d0f0, "printk" },
{ 0xb1ad28e0, "__gnu_mcount_nc" },
};
static const char __module_depends[]
__used
__attribute__((section(".modinfo"))) =
"depends=";
MODULE_INFO(srcversion, "1D1195547F52B414768B135");
File added
File added
kernel//home/pi/das/fire/fire_detect_dev.ko
sudo rmmod fire_detect_dev
sudo rmmod smoke_dev
sudo insmod fire/fire_detect_dev.ko
sudo insmod smoke/smoke_dev.ko
gcc -o app app.c
gcc -o app2 app2.c
cmd_/home/pi/das/smoke/smoke_dev.ko := ld -r -EL -T ./scripts/module-common.lds -T ./arch/arm/kernel/module.lds --build-id -o /home/pi/das/smoke/smoke_dev.ko /home/pi/das/smoke/smoke_dev.o /home/pi/das/smoke/smoke_dev.mod.o ; true
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment