Tôi rất mới với hạt nhân Linux. Và tôi đang sử dụng công cụ thưa thớt để làm sạch nhiễu hiện diện trong mã. Tôi đã gặp các macro này:mục đích của macro tiền xử lý được xác định trong tệp linux/compiler.h là gì?
# define __user __attribute__((noderef, address_space(1)))
# define __kernel __attribute__((address_space(0)))
# define __safe __attribute__((safe))
# define __force __attribute__((force))
# define __nocast __attribute__((nocast))
# define __iomem __attribute__((noderef, address_space(2)))
# define __must_hold(x) __attribute__((context(x,1,1)))
# define __acquires(x) __attribute__((context(x,0,1)))
# define __releases(x) __attribute__((context(x,1,0)))
# define __acquire(x) __context__(x,1)
# define __release(x) __context__(x,-1)
# define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0)
# define __percpu __attribute__((noderef, address_space(3)))
Và bây giờ tôi muốn biết: cách chúng được sử dụng thưa thớt để báo cáo lỗi/cảnh báo?
Câu hỏi của tôi:
- Tôi muốn các chi tiết làm thế nào họ giúp trình biên dịch và thưa thớt để báo cáo cảnh báo.
- Những trường hợp này là address_space (x)ngữ cảnh (X, x, x) và có mục đích gì?
- mục đích __nocast, __force, __user, __safe là gì?
Cảm ơn bạn đã chia sẻ bài viết. Nhưng tôi vẫn không thể tìm ra câu trả lời như thế nào giúp nó thưa thớt để báo cáo vấn đề này. Tôi vẫn chưa nhận được how'address_space (num) 'thực sự đang giúp giải quyết và báo cáo cảnh báo. Tương tự 'ngữ cảnh (x, x, x)'. –