Skip to content
Snippets Groups Projects
Commit 06766f75 authored by Damin Lee's avatar Damin Lee
Browse files

project

parent 7db77abe
No related branches found
No related tags found
No related merge requests found
app 0 → 100755
File added
app.c 0 → 100644
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/sysmacros.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define MAXLINE 511
#define PORT 65021
#define SOIL_MAJOR_NUMBER 501
#define SOIL_MINOR_NUMBER 101
#define SOIL_DEV_PATH_NAME "/dev/soil"
#define PUMP_MAJOR_NUMBER 503
#define PUMP_MINOR_NUMBER 103
#define PUMP_DEV_PATH_NAME "/dev/pump"
int main(int argc, char* argv[]){
dev_t soil_dev;
int fd_soil;
soil_dev = makedev(SOIL_MAJOR_NUMBER, SOIL_MINOR_NUMBER);
mknod(SOIL_DEV_PATH_NAME, S_IFCHR|0666, soil_dev);
fd_soil = open(SOIL_DEV_PATH_NAME, O_RDWR);
if(fd_soil < 0){
printf("fail to open soil\n");
return -1;
}
dev_t pump_dev;
int fd_pump;
pump_dev = makedev(PUMP_MAJOR_NUMBER, PUMP_MINOR_NUMBER);
mknod(PUMP_DEV_PATH_NAME, S_IFCHR|0666, pump_dev);
fd_pump = open(PUMP_DEV_PATH_NAME, O_RDWR);
if(fd_pump < 0){
printf("fail to open pump\n");
return -1;
}
int cli_sock;
struct sockaddr_in serv_addr;
int datalen;
char buf[MAXLINE +1];
int nbytes;
char* addrserv;
int nport;
pid_t pid;
struct hostent *host_ent;
if (argc == 2){
addrserv =argv[1];
nport = PORT;
} else if (argc == 3) {
addrserv =argv[1];
nport = atoi(argv[2]);
} else {
printf("Usage: %s <server address>\n", argv[0]);
printf(" or\nUsage: %s <server address <port>>\n", argv[0]);
exit(0);
}
cli_sock = socket(PF_INET, SOCK_STREAM, 0);
if (cli_sock == -1){
perror("socket() error!\n");
exit(0);
}
if (strncmp(addrserv, "192.168.", 8) != 0){
if ((host_ent = gethostbyname(addrserv)) == NULL) {
herror("gethostbyname() error\n");
}
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;
serv_addr.sin_addr.s_addr = inet_addr(addrserv);
serv_addr.sin_port = htons(nport);
if (connect(cli_sock, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1) { //connect to serve
perror("connect() error\n");
exit(0);
}
char socket_str[MAXLINE];
if((pid = fork()) == -1){
perror("fork() error\n");
exit(0);
} else if(pid ==0) {
int soil_state=0;
while(1){
read(fd_soil, &soil_state, 4);
printf("soil state:%d\n",soil_state);
if(soil_state<300){
while(1){
read(fd_soil, &soil_state, 4);
printf("soil state2:%d\n",soil_state);
if(soil_state>600) break;
int data = 255;
write(fd_pump, &data, sizeof(data));
}
}
char soil_str[MAXLINE];
int tmp=soil_state/10;
sprintf(soil_str,"%d",tmp);
int i=0;
int cnt=0;
socket_str[cnt++]='S';
socket_str[cnt++]=':';
for(i=0;i<strlen(soil_str);i++){
socket_str[cnt++]=soil_str[i];
}
socket_str[cnt++]='%';
socket_str[cnt]='\0';
printf("%s\n",&socket_str);
nbytes = strlen(socket_str);
write(cli_sock, socket_str, nbytes);
sleep(4);
}
} else if (pid > 0){
while(1){
if((nbytes = read(cli_sock, socket_str, MAXLINE)) < 0){
perror("read() error\n");
exit(0);
}
/*fputs(buf,stdout);
printf("%s\n", socket_str);
if(strncmp(buf, "exit",4) == 0)
exit(0);*/
}
}
/*int soil_state=0;
while(1){
read(fd_soil, &soil_state, 4);
printf("soil state:%d\n",soil_state);
if(soil_state<300){
while(1){
read(fd_soil, &soil_state, 4);
printf("soil state2:%d\n",soil_state);
if(soil_state>600) break;
int data = 255;
write(fd_pump, &data, sizeof(data));
}
}
sleep(1);
}*/
close(fd_soil);
close(fd_pump);
close(cli_sock);
return 0;
}
app2 0 → 100755
File added
app2.c 0 → 100644
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/sysmacros.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define MAXLINE 511
#define PORT 65021
#define TEMP_MAJOR_NUMBER 502
#define TEMP_MINOR_NUMBER 102
#define TEMP_DEV_PATH_NAME "/dev/temp"
#define LED_MAJOR_NUMBER 504
#define LED_MINOR_NUMBER 104
#define LED_DEV_PATH_NAME "/dev/led"
#define MOTER_MAJOR_NUMBER 505
#define MOTER_MINOR_NUMBER 105
#define MOTER_DEV_PATH_NAME "/dev/moter"
int main(int argc, char* argv[]){
dev_t temp_dev;
int fd_temp;
temp_dev = makedev(TEMP_MAJOR_NUMBER, TEMP_MINOR_NUMBER);
mknod(TEMP_DEV_PATH_NAME, S_IFCHR|0666, temp_dev);
fd_temp = open(TEMP_DEV_PATH_NAME, O_RDWR);
if(fd_temp < 0){
printf("fail to open temp\n");
return -1;
}
dev_t led_dev;
int fd_led;
led_dev = makedev(LED_MAJOR_NUMBER, LED_MINOR_NUMBER);
mknod(LED_DEV_PATH_NAME, S_IFCHR|0666, led_dev);
fd_led = open(LED_DEV_PATH_NAME, O_RDWR);
if(fd_led < 0){
printf("fail to open led\n");
return -1;
}
dev_t moter_dev;
int fd_moter;
moter_dev = makedev(MOTER_MAJOR_NUMBER, MOTER_MINOR_NUMBER);
mknod(MOTER_DEV_PATH_NAME, S_IFCHR|0666, moter_dev);
fd_moter = open(MOTER_DEV_PATH_NAME, O_RDWR);
if(fd_moter < 0){
printf("fail to open moter\n");
return -1;
}
int cli_sock;
struct sockaddr_in serv_addr;
int datalen;
char buf[MAXLINE +1];
int nbytes;
char* addrserv;
int nport;
pid_t pid;
struct hostent *host_ent;
if (argc == 2){
addrserv =argv[1];
nport = PORT;
} else if (argc == 3) {
addrserv =argv[1];
nport = atoi(argv[2]);
} else {
printf("Usage: %s <server address>\n", argv[0]);
printf(" or\nUsage: %s <server address <port>>\n", argv[0]);
exit(0);
}
cli_sock = socket(PF_INET, SOCK_STREAM, 0);
if (cli_sock == -1){
perror("socket() error!\n");
exit(0);
}
if (strncmp(addrserv, "192.168.", 8) != 0){
if ((host_ent = gethostbyname(addrserv)) == NULL) {
herror("gethostbyname() error\n");
}
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;
serv_addr.sin_addr.s_addr = inet_addr(addrserv);
serv_addr.sin_port = htons(nport);
if (connect(cli_sock, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1) { //connect to serve
perror("connect() error\n");
exit(0);
}
char socket_str[MAXLINE];
if((pid = fork()) == -1){
perror("fork() error\n");
exit(0);
} else if(pid ==0) {
int dht11_dat[5] = {0, };
int led_state=0;
while(1){
read(fd_temp, &dht11_dat, sizeof(dht11_dat));
printf("humidity = %d.%d %% Temperature = %d.%d *C \n", dht11_dat[0], dht11_dat[1], dht11_dat[2], dht11_dat[3]) ;
int temp=dht11_dat[2];
if(temp>29){
int data=400;
int cnt=0;
printf("Moter on!!\n");
while(cnt<5){
write(fd_moter, &data, sizeof(data));
cnt++;
}
printf("Moter off!!\n");
}
if(temp<20){
led_state = 1;
printf("LED on!!\n");
write(fd_led, &led_state, 4);
}
else{
led_state = 0;
printf("LED off!!\n");
write(fd_led, &led_state, 4);
}
//char socket_str[MAXLINE];
char humi_str[10];
char temp_str[10];
sprintf(humi_str,"%d",dht11_dat[0]);
sprintf(temp_str,"%d",dht11_dat[2]);
int i=0;
int cnt=0;
socket_str[cnt++]='T';
socket_str[cnt++]=':';
for(i=0;i<strlen(temp_str);i++){
socket_str[cnt++]=temp_str[i];
}
socket_str[cnt++]='*';
socket_str[cnt++]='C';
socket_str[cnt++]=',';
socket_str[cnt++]=' ';
socket_str[cnt++]='H';
socket_str[cnt++]=':';
for(i=0;i<strlen(humi_str);i++){
socket_str[cnt++]=humi_str[i];
}
socket_str[cnt++]='%';
socket_str[cnt]='\0';
printf("%s\n",&socket_str);
nbytes = strlen(socket_str);
write(cli_sock, socket_str, nbytes);
sleep(4);
}
} else if (pid > 0){
while(1){
if((nbytes = read(cli_sock, socket_str, MAXLINE)) < 0){
perror("read() error\n");
exit(0);
}
/*fputs(buf,stdout);
printf("%s\n", socket_str);
if(strncmp(buf, "exit",4) == 0)
exit(0);*/
}
}
/*int led_state=0;
int dht11_dat[5] = {0, };
while(1){
read(fd_temp, &dht11_dat, sizeof(dht11_dat));
printf("humidity = %d.%d %% Temperature = %d.%d *C \n", dht11_dat[0], dht11_dat[1], dht11_dat[2], dht11_dat[3]) ;
int temp=dht11_dat[2];
if(temp>29){
int data=400;
int cnt=0;
printf("Moter on!!\n");
while(cnt<5){
write(fd_moter, &data, sizeof(data));
cnt++;
}
printf("Moter off!!\n");
}
if(temp<20){
led_state = 1;
printf("LED on!!\n");
write(fd_led, &led_state, 4);
}
else{
led_state = 0;
printf("LED off!!\n");
write(fd_led, &led_state, 4);
}
sleep(2);
}*/
close(fd_temp);
close(fd_led);
close(fd_moter);
close(cli_sock);
return 0;
}
cmd_/home/pi/Desktop/project/led/led_dev.ko := ld -r -EL -T ./scripts/module-common.lds -T ./arch/arm/kernel/module.lds --build-id -o /home/pi/Desktop/project/led/led_dev.ko /home/pi/Desktop/project/led/led_dev.o /home/pi/Desktop/project/led/led_dev.mod.o ; true
This diff is collapsed.
This diff is collapsed.
/home/pi/Desktop/project/led/led_dev.ko
/home/pi/Desktop/project/led/led_dev.o
KERNEL_VER := $(shell uname -r)
KERNEL_DIR = '/lib/modules/$(KERNEL_VER)/build'
obj-m := led_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/ktime.h>
#include <linux/timer.h>
#include <linux/delay.h>
#include <asm/mach/map.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#define LED_MAJOR_NUMBER 504
#define LED_MINOR_NUMBER 104
#define LED_DEV_NAME "led"
#define GPIO_BASE_ADDR 0x3F200000
#define GPFSEL0 0x04
#define GPSET0 0x1C
#define GPCLR0 0x28
#define GPLEV0 0x34
static void __iomem *gpio_base;
volatile unsigned int *gpsel1;
volatile unsigned int *gpset1;
volatile unsigned int *gpclr1;
volatile unsigned int *gplev1;
int led_open(struct inode *inode, struct file *filp){
printk(KERN_ALERT "led driver open!!\n");
gpio_base = ioremap(GPIO_BASE_ADDR, 0x60);
gpsel1 = (volatile unsigned int *)(gpio_base + GPFSEL0);
gpset1 = (volatile unsigned int *)(gpio_base + GPSET0);
gpclr1 = (volatile unsigned int *)(gpio_base + GPCLR0);
gplev1 = (volatile unsigned int *)(gpio_base + GPLEV0);
*gpsel1 |= (1<<6);
return 0;
}
int led_release(struct inode *inode, struct file *filp){
printk(KERN_ALERT "led driver closed!!\n");
iounmap((void *)gpio_base);
return 0;
}
ssize_t led_write(struct file *filp, const char *buf, size_t size, loff_t *f_pos){
int led_onoff = 0;
copy_from_user(&led_onoff, buf, 4);
if(led_onoff == 1){
printk(KERN_ALERT "LED On!!\n");
*gpset1 |= (1<<12);
}
else{
printk(KERN_ALERT "LED Off!!\n");
*gpclr1 |= (1<<12);
}
return size;
}
static struct file_operations led_fops={
.owner = THIS_MODULE,
.write = led_write,
.open = led_open,
.release = led_release
};
int __init led_init(void){
if(register_chrdev(LED_MAJOR_NUMBER, LED_DEV_NAME, &led_fops) < 0)
printk(KERN_ALERT "led driver initialization fail\n");
else
printk(KERN_ALERT "led driver initialization success\n");
return 0;
}
void __exit led_exit(void){
unregister_chrdev(LED_MAJOR_NUMBER, LED_DEV_NAME);
printk(KERN_ALERT "led driver exit done\n");
}
module_init(led_init);
module_exit(led_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Damin");
MODULE_DESCRIPTION("des");
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"))) = {
{ 0xad1a7def, "module_layout" },
{ 0x6bc3fbc0, "__unregister_chrdev" },
{ 0xcfc78319, "__register_chrdev" },
{ 0xdb7305a1, "__stack_chk_fail" },
{ 0x5f754e5a, "memset" },
{ 0x28cc25db, "arm_copy_from_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, "37BBFFDFC3D20A8435D8011");
File added
File added
kernel//home/pi/Desktop/project/led/led_dev.ko
make clean
make
sudo rmmod led_dev
sudo insmod led_dev.ko
cmd_/home/pi/Desktop/project/moter/moter_dev.ko := ld -r -EL -T ./scripts/module-common.lds -T ./arch/arm/kernel/module.lds --build-id -o /home/pi/Desktop/project/moter/moter_dev.ko /home/pi/Desktop/project/moter/moter_dev.o /home/pi/Desktop/project/moter/moter_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