Skip to content
Snippets Groups Projects
Commit 72bddbc2 authored by ParkHyeonJin's avatar ParkHyeonJin
Browse files

Status

parent 175de2a0
No related branches found
No related tags found
No related merge requests found
Showing
with 1717 additions and 0 deletions
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/sysmacros.h>
#include "lcdapp.h"
#define I2C_BUS "/dev/lcd" // lcd driver
#define LCD_RS 0 // LCD RS : 0 = command, 1 = data
#define LCD_RW 1 // LCD R/W : 0 = write, 1 = read
#define LCD_EN 2 // LCD EN : 0 = disable, 1 = enable
#define LCD_BL 3 // LCD BL : 0 = backlight off, 1 = backlight on
#define LCD_MAJOR_NUMBER 509
#define LCD_MINOR_NUMBER 0
#define I2C_SLAVE 0x3F214008
#define TEMP_MAJOR_NUMBER 502
#define TEMP_MINOR_NUMBER 102
#define TEMP_DEV_PATH_NAME "/dev/temp"
void main() {
//i2c_start();
int i2cFile;
int fd;
dev_t lcd_dev;
dev_t temp_dev;
lcd_dev = makedev(LCD_MAJOR_NUMBER, LCD_MINOR_NUMBER);
mknod(I2C_BUS, S_IFCHR|0666, lcd_dev);
temp_dev = makedev(TEMP_MAJOR_NUMBER, TEMP_MINOR_NUMBER);
mknod(TEMP_DEV_PATH_NAME, S_IFCHR|0666, temp_dev);
i2cFile = open(I2C_BUS, O_RDWR);
fd = open(TEMP_DEV_PATH_NAME, O_RDWR);
if(i2cFile < 0) {
printf("fail to open lcd.\n");
return;
}
if(fd< 0){
printf("fail to open temp\n");
return;
}
int dht11_dat[5] = {0, };
read(fd, &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]) ;
close(fd);
}
File added
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/sysmacros.h>
#include "lcdapp.h"
#define I2C_BUS "/dev/lcd" // lcd driver
#define BUZZER_DEV_PATH_NAME "/dev/buzzer" // buzzer driver
#define BUZZER_MAJOR_NUMBER 502
#define BUZZER_MINOR_NUMBER 0
#define LCD_MAJOR_NUMBER 509
#define LCD_MINOR_NUMBER 0
#define PORT 65021
#define BUFFER_SIZE 4096
#define BUFF_SIZE 100
# define LISTEN_QUEUE_SIZE 5
void childHandler(int signal)
{
int status;
pid_t spid;
while((spid = waitpid(-1, &status, WNOHANG)) > 0)
{
printf("================================\n");
printf("PID : %d\n", spid);
printf("Exit Value : %d\n", WEXITSTATUS(status));
printf("Exit Stat : %d\n", WIFEXITED(status));
}
}
void main() {
signal(SIGCHLD, (void *)childHandler);
struct sockaddr_in listenSocket;
memset(&listenSocket, 0, sizeof(listenSocket));
listenSocket.sin_family = AF_INET;
listenSocket.sin_addr.s_addr = htonl(INADDR_ANY);
listenSocket.sin_port = htons(PORT);
int listenFD = socket(AF_INET, SOCK_STREAM, 0);
int connectFD;
ssize_t receivedBytes;
char readBuff[BUFFER_SIZE];
char sendBuff[BUFFER_SIZE];
pid_t pid;
int lcd;
int fd;
int buzzer;
dev_t lcd_dev;
dev_t temp_dev;
dev_t buzzer_dev;
buzzer_dev = makedev(BUZZER_MAJOR_NUMBER, BUZZER_MINOR_NUMBER);
mknod(BUZZER_DEV_PATH_NAME, S_IFCHR|0666, buzzer_dev);
buzzer = open("/dev/buzzer", O_RDWR);
if(buzzer < 0)
{
printf("fail to open buzzer\n");
printf("%d\n",fd);
return;
}
lcd_dev = makedev(LCD_MAJOR_NUMBER, LCD_MINOR_NUMBER);
mknod(I2C_BUS, S_IFCHR|0666, lcd_dev);
lcd = open(I2C_BUS, O_RDWR);
if(lcd < 0) {
printf("fail to open lcd.\n");
return;
}
if (bind(listenFD, (struct sockaddr *) &listenSocket, sizeof(listenSocket)) == -1) {
printf("Can not bind.\n");
return;
}
if (listen(listenFD, LISTEN_QUEUE_SIZE) == -1) {
printf("Listen fail.\n");
return;
}
printf("Waiting for clients...\n");
lcd_display_init(lcd);
lcd_clear(lcd);
char line1[16]="T:0'C, H:0%";
char line2_s[8]="S:0%";
char line2_g[8]="G:0";
int isinit = 0;
while (1)
{
struct sockaddr_in connectSocket, peerSocket;
socklen_t connectSocketLength = sizeof(connectSocket);
while((connectFD = accept(listenFD, (struct sockaddr*)&connectSocket, (socklen_t *)&connectSocketLength)) >= 0)
{
getpeername(connectFD, (struct sockaddr*)&peerSocket, &connectSocketLength);
char peerName[sizeof(peerSocket.sin_addr) + 1] = { 0 };
sprintf(peerName, "%s", inet_ntoa(peerSocket.sin_addr));
if(strcmp(peerName,"0.0.0.0") != 0)
printf("Client : %s\n", peerName);
if (connectFD < 0)
{
printf("Server: accept failed\n");
exit(0);
}
pid = fork();
if(pid == 0) // child
{
close(listenFD);
ssize_t receivedBytes;
int coun = 0;
while((receivedBytes = read(connectFD, readBuff, BUFF_SIZE)) > 0)
{
coun++;
readBuff[receivedBytes] = '\0';
fputs(readBuff, stdout);
fflush(stdout);
sprintf(sendBuff,"%s\n",readBuff);
char temp[16];
for(int i=0;i<receivedBytes;i++){
temp[i]=sendBuff[i];
}
switch(temp[0]){
case 'T':
while(isinit==1);
strcpy(line1,temp);
lcd_print(line1,0,0,lcd);
break;
case 'S':
while(isinit==1);
strcpy(line2_s,temp);
lcd_print(line2_s,1,0,lcd);
break;
case 'G':
while(isinit==1);
strcpy(line2_g,temp);
lcd_print(line2_g,1,8,lcd);
break;
case 'F':
isinit=1;
lcd_clear(lcd);
lcd_print("Fire!!!!",0,0,lcd);
sleep(1);
lcd_display_init(lcd);
lcd_clear(lcd);
isinit=0;
int dist = 100;
write(buzzer,&dist,4);
break;
}
if(temp[0]=='F') {
write(connectFD, "F", strlen("F"));
}
else{
temp[receivedBytes]='\0';
write(connectFD, temp, strlen(temp));
}
if(coun%10==0) lcd_clear(lcd);
}
close(connectFD);
return;
}
else
close(connectFD);
}
}
close(listenFD);
return;
}
cmd_/home/pi/Desktop/info_pi/buzzerdriver/buzzer.ko := ld -r -EL -T ./scripts/module-common.lds -T ./arch/arm/kernel/module.lds --build-id -o /home/pi/Desktop/info_pi/buzzerdriver/buzzer.ko /home/pi/Desktop/info_pi/buzzerdriver/buzzer.o /home/pi/Desktop/info_pi/buzzerdriver/buzzer.mod.o ; true
This diff is collapsed.
This diff is collapsed.
/home/pi/Desktop/info_pi/buzzerdriver/buzzer.ko
/home/pi/Desktop/info_pi/buzzerdriver/buzzer.o
KERNEL_DIR = /lib/modules/4.19.97-v7+/build
obj-m := buzzer.o
PWD := $(shell pwd)
all:
make -C $(KERNEL_DIR) M=$(PWD) modules
clean:
make -C $(KERNEL_DIR) M=$(PWD) clean
File added
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/sysmacros.h>
#define BUZZER_MAJOR_NUMBER 502
#define BUZZER_MINOR_NUMBER 0
#define BUZZER_DEV_PATH_NAME "/dev/buzzer"
int main(void)
{
dev_t buzzer_dev;
int fd;
buzzer_dev = makedev(BUZZER_MAJOR_NUMBER, BUZZER_MINOR_NUMBER);
mknod(BUZZER_DEV_PATH_NAME, S_IFCHR|0666, buzzer_dev);
fd = open("/dev/buzzer", O_RDWR);
if(fd < 0)
{
printf("fail to open buzzer\n");
printf("%d\n",fd);
return -1;
}
int dist=440;
write(fd,&dist,4);
dist=500;
write(fd,&dist,4);
dist=600;
write(fd,&dist,4);
return 0;
}
File added
#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/timer.h>
#include <linux/ktime.h>
#include <linux/jiffies.h>
#include <linux/delay.h>
#include <asm/mach/map.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#define buzzer_MAJOR_NUMBER 502
#define buzzer_DEV_NAME "buzzer"
#define GPIO_BASE_ADDR 0x3F200000
#define GPFSEL2 0x08 // pin 20
#define GPSET0 0x1c // output to 0 // pin 20
#define GPSET1 0x20 // output to 1
#define GPLEV0 0x34
#define GPCLR0 0x28
static void __iomem *gpio_base;
volatile unsigned int *gpfsel0;
volatile unsigned int *gpfsel1;
volatile unsigned int *gpset0;
volatile unsigned int *gpset1;
volatile unsigned int *gplev0;
volatile unsigned int *gpclr1;
int buzzer_open(struct inode *inode, struct file *filp){
printk(KERN_ALERT "buzzer driver open!!\n");
gpio_base = ioremap(GPIO_BASE_ADDR, 0x60);
gpfsel1 = (volatile unsigned int *)(gpio_base + GPFSEL2);
gpset0 = (volatile unsigned int *)(gpio_base + GPSET0);
gpset1 = (volatile unsigned int *)(gpio_base + GPSET1);
gplev0 = (volatile unsigned int *)(gpio_base + GPLEV0);
gpclr1 = (volatile unsigned int *)(gpio_base + GPCLR0);
*gpfsel1 |= (1<<0); // pin 20 to OUTPUT
return 0;
}
int buzzer_release(struct inode *inode, struct file *filp){
printk(KERN_ALERT "buzzer driver closed!!\n");
iounmap((void *)gpio_base);
return 0;
}
ssize_t buzzer_write(struct file *filp, const char *buf, size_t size, loff_t *f_pos){
int buz_beep = 0;
copy_from_user(&buz_beep, buf, 4);
long beepDelay = (long)(1000000/buz_beep);
long time = (long)((500*1000)/(beepDelay*2));
int i;
for(i=0;i<time*2;i++){
*gpset0 |= (1<<20); // pin 20 to 1
udelay(beepDelay);
*gpclr1 |= (1<<20);
udelay(beepDelay);
}
*gpclr1 |= (1<<20);
mdelay(100);
return size;
}
static struct file_operations buzzer_fops={
.owner = THIS_MODULE,
.write = buzzer_write,
.open = buzzer_open,
.release = buzzer_release
};
int __init buzzer_init(void){
if(register_chrdev(buzzer_MAJOR_NUMBER, buzzer_DEV_NAME, &buzzer_fops) < 0)
printk(KERN_ALERT "buzzer driver initialization fail\n");
else
printk(KERN_ALERT "buzzer driver initialization success\n");
return 0;
}
void __exit buzzer_exit(void){
unregister_chrdev(buzzer_MAJOR_NUMBER, buzzer_DEV_NAME);
printk(KERN_ALERT "buzzer driver exit done\n");
}
module_init(buzzer_init);
module_exit(buzzer_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("ALNORM");
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" },
{ 0x8e865d3c, "arm_delay_ops" },
{ 0x28cc25db, "arm_copy_from_user" },
{ 0x8f678b07, "__stack_chk_guard" },
{ 0x2196324, "__aeabi_idiv" },
{ 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, "B61C6E428A0765CD8942613");
File added
File added
File added
kernel//home/pi/Desktop/info_pi/buzzerdriver/buzzer.ko
sudo rmmod buzzer
make clean
make
sudo insmod buzzer.ko
rm app
gcc -o app app.c
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment