Skip to content
Snippets Groups Projects
Commit fcf22529 authored by hyunjun_cho's avatar hyunjun_cho
Browse files

Merge branch 'master' of git.ajou.ac.kr:hyunjun/system_programming

parents f16e1a9f 4f97cc47
No related branches found
No related tags found
No related merge requests found
/home/pi/Desktop/project/led/led_dev.ko
/home/pi/Desktop/project/led/led_dev.o
KERNEL_DIR = /lib/modules/4.19.97-v7+/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/delay.h>
#include <asm/mach/map.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#define LED_MAJOR_NUMBER 506
#define LED_DEV_NAME "led_dev"
#define GPIO_BASE_ADDR 0x3F200000
#define GPFSEL1 0x04
#define GPFSEL2 0x00
#define GPSET0 0x1C
#define GPCLR0 0x28
#define GPLEV0 0x34
#define IOCTL_MAGIC_NUMBER 'K'
#define IOCTL_CMD_SET_TEMP_BLINK _IOWR(IOCTL_MAGIC_NUMBER,1,int)
#define IOCTL_CMD_SET_TEMP_OFF _IOWR(IOCTL_MAGIC_NUMBER,2,int)
static char *buffer = NULL;
static int buf2;
static void __iomem *gpio_base;
volatile unsigned int *gpsel1;
volatile unsigned int *gpsel2;
volatile unsigned int *gpset1;
volatile unsigned int *gpclr1;
volatile unsigned int *gplev0;
int led_open(struct inode *inode, struct file *flip) {
printk(KERN_ALERT "LED driver open!!\n");
gpio_base = ioremap(GPIO_BASE_ADDR, 0x60);
gpsel1 = (volatile unsigned int *)(gpio_base + GPFSEL1);
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 led_release(struct inode *inode, struct file *flip) {
printk(KERN_ALERT "LED driver closed!!\n");
iounmap((void *)gpio_base);
return 0;
}
long led_ioctl(struct file *flip, unsigned int cmd, unsigned long arg) {
int kbuf = -1;
int i = 0;
*gpsel2 |= (1 << 12);
switch (cmd) {
case IOCTL_CMD_SET_TEMP_BLINK:
copy_from_user(&kbuf, (const void*)arg, 4);
*gpset1 |= (1 << 4);
break;
case IOCTL_CMD_SET_TEMP_OFF:
*gpclr1 = (1<<4);
break;
}
return 0;
}
static struct file_operations led_fops = {
.owner = THIS_MODULE,
.open = led_open,
.release = led_release,
.unlocked_ioctl = led_ioctl
};
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 intialization success\n");
}
//*gpsel1 |= (0 << 24);
return 0;
}
void __exit led_exit(void) {
unregister_chrdev(LED_MAJOR_NUMBER, LED_DEV_NAME);
printk(KERN_ALERT "LED driver exit doen\n");
}
module_init(led_init);
module_exit(led_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("joreka");
MODULE_DESCRIPTION("led_dev");
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, "8134FFB9FE3223B3D683362");
File added
File added
kernel//home/pi/Desktop/project/led/led_dev.ko
cmd_/home/pi/Desktop/project/led2/led2_dev.ko := ld -r -EL -T ./scripts/module-common.lds -T ./arch/arm/kernel/module.lds --build-id -o /home/pi/Desktop/project/led2/led2_dev.ko /home/pi/Desktop/project/led2/led2_dev.o /home/pi/Desktop/project/led2/led2_dev.mod.o ; true
This diff is collapsed.
This diff is collapsed.
/home/pi/Desktop/project/led2/led2_dev.ko
/home/pi/Desktop/project/led2/led2_dev.o
KERNEL_DIR = /lib/modules/4.19.97-v7+/build
obj-m := led2_dev.o
PWD := $(shell pwd)
all:
make -C $(KERNEL_DIR) M=$(PWD) modules
clean:
make -C $(KERNEL_DIR) M=$(PWD) clean
led2/app 0 → 100755
File added
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/sysmacros.h>
#include <time.h>
#define LED_MAJOR_NUMBER 507
#define LED_MINOR_NUMBER 100
#define LED_DEV_PATH_NAME "/dev/led2_dev"
#define IOCTL_MAGIC_NUMBER 'J'
#define IOCTL_CMD_SET_DIRECTION _IOWR(IOCTL_MAGIC_NUMBER,0,int)
#define IOCTL_CMD_SET_BLINK _IOWR(IOCTL_MAGIC_NUMBER,1,int)
#define IOCTL_CMD_SET_OFF _IOWR(IOCTL_MAGIC_NUMBER,2,int)
int main(){
dev_t led2_dev;
int fd;
int a=1;
int b=5;
led2_dev=makedev(LED_MAJOR_NUMBER, LED_MINOR_NUMBER);
mknod(LED_DEV_PATH_NAME, S_IFCHR|0666, led2_dev);
fd=open(LED_DEV_PATH_NAME, O_RDWR);
if(fd<0){
printf("fail to open led\n");
return -1;
}
ioctl(fd, IOCTL_CMD_SET_DIRECTION, &a);
sleep(1);
ioctl(fd, IOCTL_CMD_SET_BLINK, &b);
sleep(1);
ioctl(fd, IOCTL_CMD_SET_OFF, &b);
close(fd);
return 0;
}
#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 <asm/mach/map.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#define LED_MAJOR_NUMBER 507
#define LED_DEV_NAME "led2_dev"
#define GPIO_BASE_ADDR 0x3F200000
#define GPFSEL1 0x04
#define GPSET0 0x1C
#define GPCLR0 0x28
#define GPLEV0 0x34
#define IOCTL_MAGIC_NUMBER 'J'
#define IOCTL_CMD_SET_SOUND_BLINK _IOWR(IOCTL_MAGIC_NUMBER,1,int)
#define IOCTL_CMD_SET_SOUND_OFF _IOWR(IOCTL_MAGIC_NUMBER,2,int)
static char *buffer = NULL;
static int buf2;
static void __iomem *gpio_base;
volatile unsigned int *gpsel1;
volatile unsigned int *gpset1;
volatile unsigned int *gpclr1;
int led_open(struct inode *inode, struct file *flip) {
printk(KERN_ALERT "LED driver open!!\n");
gpio_base = ioremap(GPIO_BASE_ADDR, 0x60);
gpsel1 = (volatile unsigned int *)(gpio_base + GPFSEL1);
gpset1 = (volatile unsigned int *)(gpio_base + GPSET0);
gpclr1 = (volatile unsigned int *)(gpio_base + GPCLR0);
return 0;
}
int led_release(struct inode *inode, struct file *flip) {
printk(KERN_ALERT "LED driver closed!!\n");
iounmap((void *)gpio_base);
return 0;
}
long led_ioctl(struct file *flip, unsigned int cmd, unsigned long arg) {
int kbuf = -1;
int i = 0;
*gpsel1 |= (1 << 24);
switch (cmd) {
case IOCTL_CMD_SET_SOUND_BLINK:
copy_from_user(&kbuf, (const void*)arg, 4);
*gpset1 |= (1 << 18);
break;
case IOCTL_CMD_SET_SOUND_OFF:
*gpclr1 = (1 << 18);
break;
}
return 0;
}
static struct file_operations led2_fops = {
.owner = THIS_MODULE,
.open = led_open,
.release = led_release,
.unlocked_ioctl = led_ioctl
};
int __init led_init(void) {
if (register_chrdev(LED_MAJOR_NUMBER, LED_DEV_NAME, &led2_fops) < 0)
printk(KERN_ALERT "LED driver initialization fail\n");
else {
printk(KERN_ALERT "LED driver intialization success\n");
}
//*gpsel1 |= (0 << 24);
return 0;
}
void __exit led_exit(void) {
unregister_chrdev(LED_MAJOR_NUMBER, LED_DEV_NAME);
printk(KERN_ALERT "LED driver exit doen\n");
}
module_init(led_init);
module_exit(led_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("joreka");
MODULE_DESCRIPTION("led2_dev");
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, "84DF592FA4389C4C9F938B1");
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment