linux 驅動調試問題記錄

1、非root用戶文件操作權限不夠

文件屬性 rwx rwx rwx — — —
sudo chmod 777 /dev/xxx
其中 R = 4, W = 2, X = 1
詳細https://www.cnblogs.com/ccEmily/p/5672749.html

2、控制檯不打印消息

sudo dmesg 詳細https://blog.csdn.net/a29562268/article/details/78443087
但是通過改變printk的打印級別沒有調試成功 echo 8 4 1 7 > /proc/sys/kernel/printk 其中數值都可以更改
cat /proc/sys/kernel/printk 查看 printk 的打印級別
printk 數值越小,優先級越高
詳細https://blog.csdn.net/u012627502/article/details/39182713

通過ssh或者telent建立的遠程登錄的命令行無法接受printk的輸出

3、自動創建模塊節點

class_create()
device_create()

#include <linux/device.h>
static struct class *hellodrv_class;
#define    DEVICE_NAME     "HelloModule"
static dev_t devId;// int類型,高12位爲主設備號,低20位爲次設備號
int major;

devId = MKDEV(major, 0);
/* 在 /sys/class 下創建一個以 DEVICE_NAME 爲名字的文件夾 */
hellodrv_class = class_create(THIS_MODULE, DEVICE_NAME);
/* 在 /sys/class/DEVICE_NAME 下創建 "hellodev" 文件 */
device_create(hellodrv_class, NULL, devId, NULL, "hellodev");

卸載:

device_destroy(hellodrv_class, devId);
class_destroy(hellodrv_class);

這裏寫圖片描述

4、Makefile

原文:https://blog.csdn.net/xukai871105/article/details/36476793

三個C文件和三個頭文件
文件結果如下:根目錄中包含test.c makefileh和文件夾test-add和文件夾test-sub。
test.c makefile
【test-add】test-add.c test-add.h
【test-sub】test-sub.c test-sub.h

# 指令編譯器和選項
CC=gcc
CFLAGS=-Wall -std=gnu99

# 目標文件
TARGET=test

# SRCS變量中,文件較多時可通過“\”符號續行
SRCS = test.c \
  ./test-add/test-add.c \
  ./test-sub/test-sub.c

# gcc指令可通過-I前綴指定頭文件路徑,特別說明./代表當前路徑,../代表上一級目錄 
INC = -I./test-add -I./test-sub

OBJS = $(SRCS:.c=.o)

# 鏈接爲可執行文件
$(TARGET):$(OBJS)
    @echo TARGET:$@
    @echo OBJECTS:$^
[tab]$(CC) -o $@ $^

clean:
[tab]rm -rf $(TARGET) $(OBJS)

# 編譯規則 $@代表目標文件 $< 代表第一個依賴文件
%.o:%.c
[tab]$(CC) $(CFLAGS) $(INC) -o $@ -c $<

這裏寫圖片描述
可以看出是先編譯再鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章