私はLinuxカーネルプログラミングに初めて触れました。私はLinux kernel-6.0用のカーネルモジュールを作成しています。
以下のコードは次のとおりです。
static int count_wired_pages(unsigned long start_pfn, unsigned long end_pfn)
{
unsigned long pfn;
int nr_pages=0, page_mt, count = 0;
struct page *page;
struct page_ext *page_ext;
struct page_owner *page_owner;
for (pfn = start_pfn; pfn < end_pfn; pfn++) {
if (!pfn_valid(pfn))
continue;
/*some code*/
page = pfn_to_page(pfn);
page_ext = lookup_page_ext(page);
if (unlikely(!page_ext))
continue;
if (!test_bit(PAGE_EXT_OWNER_ALLOCATED, &page_ext->flags))
continue;
page_owner = get_page_owner(page_ext);
page_mt = gfp_migratetype(page_owner->gfp_mask);
nr_pages = (1UL << page_owner->order);
/*some code*/
}
上記のコードでは関数を呼び出していますlookup_page_ext()
。カーネル.config
ファイルで私は有効にCONFIG_PAGE_EXTENSION
してCONFIG_PAGE_OWNER
。また、私のモジュールに表示されるようにEXPORT_SYMBOL
関数を追加しました。lookup_page_ext()
これらすべてにもかかわらず、関数はを返しますNULL
。私が逃したものはありますか?