声明bitmap,实际上就是一个unsigned long数组
bit计数从0开始
#include <linux/module.h> #include <linux/sched.h> #include <linux/kthread.h> #include <linux/err.h> #include <linux/delay.h> #define BIT_CNT 50 DECLARE_BITMAP(test_map, BIT_CNT) = {[0 ... BITS_TO_LONGS(BIT_CNT) - 1] = ~0}; static int __init test_init(void) { int ret; int i; int arr_size = BITS_TO_LONGS(BIT_CNT); printk("BITS_TO_LONGS(%d): %d\n", BIT_CNT, BITS_TO_LONGS(BIT_CNT)); printk("init\n"); for (i = 0; i < arr_size; i++) { printk("[%d], %08lx\n", i, test_map[i]); } printk("clear_bit(0, test_map)\n"); clear_bit(0, test_map); for (i = 0; i < arr_size; i++) { printk("[%d], %08lx\n", i, test_map[i]); } printk("set_bit(0, test_map)\n"); set_bit(0, test_map); for (i = 0; i < arr_size; i++) { printk("[%d], %08lx\n", i, test_map[i]); } printk("clear_bit(1, test_map)\n"); clear_bit(1, test_map); for (i = 0; i < arr_size; i++) { printk("[%d], %08lx\n", i, test_map[i]); } ret = test_bit(1, test_map); printk("test_bit(1, test_map): %d\n", ret); printk("set_bit(1, test_map)\n"); set_bit(1, test_map); for (i = 0; i < arr_size; i++) { printk("[%d], %08lx\n", i, test_map[i]); } ret = test_bit(1, test_map); printk("test_bit(1, test_map): %d\n", ret); ret = test_and_set_bit(5, test_map); printk("test_and_set_bit(5, test_map): %d\n", ret); for (i = 0; i < arr_size; i++) { printk("[%d], %08lx\n", i, test_map[i]); } ret = test_and_clear_bit(5, test_map); printk("test_and_clear_bit(5, test_map): %d\n", ret); for (i = 0; i < arr_size; i++) { printk("[%d], %08lx\n", i, test_map[i]); } return 0; } static void __exit test_exit(void) { } module_init(test_init); module_exit(test_exit); MODULE_AUTHOR("tony"); MODULE_DESCRIPTION("test"); MODULE_LICENSE("GPL"); MODULE_ALIAS("test");