/*BitMapTest.c*/
#include <linux/module.h>
#include <linux/slab.h>
#define BIT_CNT 65
static int __init test_init(void)
{
long unsigned int * my_bitmap;
int arr_size = (BIT_CNT - 1) / 64 + 1;
int i;
printk("init %d bit, %d long int\n", BIT_CNT, arr_size);
my_bitmap = (long unsigned int *)kzalloc(arr_size * sizeof(long) , GFP_KERNEL);
for (i = 0; i < arr_size; i++)
{
printk("bitmap[%d] = %lx", i, my_bitmap[i]);
}
printk("set_bit(64, my_bitmap)\n");
set_bit(64, my_bitmap);
for (i = 0; i < arr_size; i++)
{
printk("bitmap[%d] = %lx", i, my_bitmap[i]);
}
printk("test_bit(64, my_bitmap)\n");
if(test_bit(64, my_bitmap) == 1)
printk("test bit is true");
else
printk("test bit is false");
printk("clear_bit(64, my_bitmap)\n");
clear_bit(64, my_bitmap);
for (i = 0; i < arr_size; i++)
{
printk("bitmap[%d] = %lx", i, my_bitmap[i]);
}
printk("test_bit(64, my_bitmap)\n");
if(test_bit(64, my_bitmap) == 1)
printk("test bit is true");
else
printk("test bit is false");
kfree(my_bitmap);
return 0;
}
static void __exit test_exit(void)
{
}
module_init(test_init);
module_exit(test_exit);
/*Makefile*/
obj-m:=BitMapTest.o
CURRENT_PATH:=$(shell pwd)
LINUX_KERNEL_PATH:=/usr/src/linux-source-4.10.0/linux-source-4.10.0
all:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean