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
Showing with 2637 additions and 0 deletions
File added
File added
make clean
make
sudo rmmod pump_dev
sudo insmod pump_dev.ko
cmd_/home/pi/Desktop/project/soil/soil_dev.ko := ld -r -EL -T ./scripts/module-common.lds -T ./arch/arm/kernel/module.lds --build-id -o /home/pi/Desktop/project/soil/soil_dev.ko /home/pi/Desktop/project/soil/soil_dev.o /home/pi/Desktop/project/soil/soil_dev.mod.o ; true
This diff is collapsed.
This diff is collapsed.
/home/pi/Desktop/project/soil/soil_dev.ko
/home/pi/Desktop/project/soil/soil_dev.o
KERNEL_VER := $(shell uname -r)
KERNEL_DIR = '/lib/modules/$(KERNEL_VER)/build'
obj-m := soil_dev.o
PWD := $(shell pwd)
all:
make -C $(KERNEL_DIR) M=$(PWD) modules
clean:
make -C $(KERNEL_DIR) M=$(PWD) clean
kernel//home/pi/Desktop/project/soil/soil_dev.ko
make clean
make
sudo rmmod soil_dev
sudo insmod soil_dev.ko
#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 SOIL_MAJOR_NUMBER 501
#define SOIL_MINOR_NUMBER 101
#define DEV_NAME "soil"
#define GPIO_BASE_ADDR 0x3F200000
#define GPFSEL0 0x00
#define GPFSEL1 0x04
#define GPFSEL2 0x08
#define GPCLR0 0x28
#define SPI_BASE_ADDR 0x3F204000
#define SPICS 0x00
#define SPIFIFO 0x04
#define SPICLK 0x08
static void __iomem *gpio_base;
volatile unsigned int *gpsel0;
volatile unsigned int *gpsel1;
volatile unsigned int *gpsel2;
volatile unsigned int *gpclr0;
static void __iomem *spi_base;
volatile unsigned int *cs;
volatile unsigned int *fifo;
volatile unsigned int *clk;
int SD_open(struct inode *inode, struct file *filp) {
printk(KERN_ALERT "soil_detect Sensor driver open!!\n");
gpio_base = ioremap(GPIO_BASE_ADDR, 0x60);
gpsel0 = (volatile unsigned int *)(gpio_base + GPFSEL0);
gpsel1 = (volatile unsigned int *)(gpio_base + GPFSEL1);
gpsel2 = (volatile unsigned int *)(gpio_base + GPFSEL2);
gpclr0 = (volatile unsigned int *)(gpio_base + GPCLR0);
spi_base = ioremap(SPI_BASE_ADDR, 0x0C);
cs = (volatile unsigned int *)(spi_base + SPICS);
fifo = (volatile unsigned int *)(spi_base + SPIFIFO);
clk = (volatile unsigned int *)(spi_base + SPICLK);
*cs = 0x00000000;
*cs |= (1<<4);
*cs |= (1<<5);
return 0;
}
int SD_release(struct inode *inode, struct file *filp) {
printk(KERN_ALERT "soil_detect Sensor driver closed!!\n");
iounmap((void*)gpio_base);
iounmap((void*)spi_base);
return 0;
}
ssize_t SD_read(struct file* flip, char* buf, size_t size, loff_t* f_pos){
unsigned char buff[3];
*gpsel0 = (1<<26); //CE0
*gpsel0 |= (1<<29); //MISO
*gpsel1 |= (1<<2); //MOSI
*gpsel1 |= (1<<5); //CLK
buff[0] = 0x01;
buff[1] = (0x08)<<4;
buff[2] = 0x00;
unsigned int adcValue = 0, i=0;
*cs |= (1<<4);
*cs |= (1<<5);
*cs |= (1<<7);
for(i=0;i<3;i++){
while(!(*cs & (1<<18)));
*fifo=buff[i];
while(!(*cs & (1<<17)));
buff[i]=*fifo;
}
while(!(*cs&(1<<16)));
adcValue = ((buff[1] & 0x03) <<8) | buff[2];
printk("result:%u\n", adcValue);
copy_to_user(buf, &adcValue, 4);
*cs |= (1<<4);
*cs |= (1<<5);
*cs &= ~(1<<7);
return size;
}
static struct file_operations SD_fops = {
.owner = THIS_MODULE,
.read = SD_read,
.open = SD_open,
.release = SD_release,
};
int __init SD_init(void) {
if(register_chrdev(SOIL_MAJOR_NUMBER, DEV_NAME, &SD_fops) < 0)
printk(KERN_ALERT "soil_detect Sensor driver init failed\n");
else
printk(KERN_ALERT "soil_detect Sensor driver init successful\n");
return 0;
}
void __exit SD_exit(void) {
unregister_chrdev(SOIL_MAJOR_NUMBER, DEV_NAME);
printk(KERN_ALERT "soil_detect Sensor driver cleanup\n");
}
module_init(SD_init);
module_exit(SD_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Damin");
MODULE_DESCRIPTION("soil_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"))) = {
{ 0xad1a7def, "module_layout" },
{ 0x6bc3fbc0, "__unregister_chrdev" },
{ 0xcfc78319, "__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, "81F0836419654AA6812719B");
File added
File added
cmd_/home/pi/Desktop/project/temp/temp_dev.ko := ld -r -EL -T ./scripts/module-common.lds -T ./arch/arm/kernel/module.lds --build-id -o /home/pi/Desktop/project/temp/temp_dev.ko /home/pi/Desktop/project/temp/temp_dev.o /home/pi/Desktop/project/temp/temp_dev.mod.o ; true
This diff is collapsed.
This diff is collapsed.
/home/pi/Desktop/project/temp/temp_dev.ko
/home/pi/Desktop/project/temp/temp_dev.o
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment