Skip to content
Snippets Groups Projects
Commit 09bf8617 authored by 201221016Kim Haeram's avatar 201221016Kim Haeram
Browse files

Initial commit

parents
Branches master
No related tags found
No related merge requests found
Pipeline #3992 failed
cmd_/home/pi/Workspace/project_6/led_dev.ko := ld -r -EL -T ./scripts/module-common.lds -T ./arch/arm/kernel/module.lds --build-id -o /home/pi/Workspace/project_6/led_dev.ko /home/pi/Workspace/project_6/led_dev.o /home/pi/Workspace/project_6/led_dev.mod.o ; true
This diff is collapsed.
This diff is collapsed.
/home/pi/Workspace/project_6/led_dev.ko
/home/pi/Workspace/project_6/led_dev.o
Makefile 0 → 100644
KERNEL_DIR = /lib/modules/4.19.75-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 <asm/mach/map.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#define LED_MAJOR_NUMBER 501
#define LED_DEV_NAME "led"
#define GPIO_BASE_ADDR 0x3F200000
#define GPFSEL1 0x04
#define GPSET0 0x1C
#define GPCLR0 0x28
static void __iomem *gpio_base;
volatile unsigned int *gpsel1;
volatile unsigned int *gpset0;
volatile unsigned int *gpclr0;
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 + GPFSEL1);
gpset0 = (volatile unsigned int *)(gpio_base + GPSET0);
gpclr0 = (volatile unsigned int *)(gpio_base + GPCLR0);
*gpsel1 |= (1<<24);
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");
*gpset0 |= (1<<18);
}else{
printk(KERN_ALERT "LED Off!!\n");
*gpclr0 |= (1<<18);
}
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("Jiwoong");
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"))) = {
{ 0xf230cadf, "module_layout" },
{ 0x6bc3fbc0, "__unregister_chrdev" },
{ 0xe549e5f5, "__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, "1A196B10808B0DE7971DDAF");
File added
led_dev.o 0 → 100644
File added
kernel//home/pi/Workspace/project_6/led_dev.ko
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment