• busybox asm/page.h: No such find.


    在用4.4.3交叉编译busybox 1.1.0 时候 出现一个错误
    /home/bsec/busybox-1.1.0/libbb/procps.c:15:22: error: asm/page.h: No such find.
    经过多方查找是由于编译的时候发现系统中没有asm/page.h这个文件,这是因为所用的内核版本过高,头文件中已经把这个文件去掉了,新建一个page.h,放到/home/bsec/busybox-1.1.0/libbb/下,并且把
    procps.c里的<sm/page.h>改成“page.h”,一切OK
    我从网上下了一个低版本的内核,从中找到了page.h文件,现把它的内容贴出来。供有同样问题的朋友们参考。。。。

    #ifndef _I386_PAGE_H
    #define _I386_PAGE_H

    /* PAGE_SHIFT determines the page size */
    #define PAGE_SHIFT 12
    #define PAGE_SIZE (1UL << PAGE_SHIFT)
    #define PAGE_MASK (~(PAGE_SIZE-1))

    #define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1))
    #define LARGE_PAGE_SIZE (1UL << PMD_SHIFT)

    #ifdef __KERNEL__
    #ifndef __ASSEMBLY__

    #include <linux/config.h>

    #ifdef CONFIG_X86_USE_3DNOW

    #include <asm/mmx.h>

    #define clear_page(page) mmx_clear_page((void *)(page))
    #define copy_page(to,from) mmx_copy_page(to,from)

    #else

    /*
    * On older X86 processors it's not a win to use MMX here it seems.
    * Maybe the K6-III ?
    */

    #define clear_page(page) memset((void *)(page), 0, PAGE_SIZE)
    #define copy_page(to,from) memcpy((void *)(to), (void *)(from), PAGE_SIZE)

    #endif

    #define clear_user_page(page, vaddr, pg) clear_page(page)
    #define copy_user_page(to, from, vaddr, pg) copy_page(to, from)

    /*
    * These are used to make use of C type-checking..
    */
    #ifdef CONFIG_X86_PAE
    typedef struct { unsigned long pte_low, pte_high; } pte_t;
    typedef struct { unsigned long long pmd; } pmd_t;
    typedef struct { unsigned long long pgd; } pgd_t;
    #define pte_val(x) ((x).pte_low | ((unsigned long long)(x).pte_high << 32))
    #define HPAGE_SHIFT 21
    #else
    typedef struct { unsigned long pte_low; } pte_t;
    typedef struct { unsigned long pmd; } pmd_t;
    typedef struct { unsigned long pgd; } pgd_t;
    #define boot_pte_t pte_t /* or would you rather have a typedef */
    #define pte_val(x) ((x).pte_low)
    #define HPAGE_SHIFT 22
    #endif
    #define PTE_MASK PAGE_MASK

    #ifdef CONFIG_HUGETLB_PAGE
    #define HPAGE_SIZE ((1UL) << HPAGE_SHIFT)
    #define HPAGE_MASK (~(HPAGE_SIZE - 1))
    #define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT)
    #endif

    typedef struct { unsigned long pgprot; } pgprot_t;

    #define pmd_val(x) ((x).pmd)
    #define pgd_val(x) ((x).pgd)
    #define pgprot_val(x) ((x).pgprot)

    #define __pte(x) ((pte_t) { (x) } )
    #define __pmd(x) ((pmd_t) { (x) } )
    #define __pgd(x) ((pgd_t) { (x) } )
    #define __pgprot(x) ((pgprot_t) { (x) } )

    #endif /* !__ASSEMBLY__ */

    /* to align the pointer to the (next) page boundary */
    #define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)

    /*
    * This handles the memory map.. We could make this a config
    * option, but too many people screw it up, and too few need
    * it.
    *
    * A __PAGE_OFFSET of 0xC0000000 means that the kernel has
    * a virtual address space of one gigabyte, which limits the
    * amount of physical memory you can use to about 950MB.
    *
    * If you want more physical memory than this then see the CONFIG_HIGHMEM4G
    * and CONFIG_HIGHMEM64G options in the kernel configuration.
    */

    /*
    * This much address space is reserved for vmalloc() and iomap()
    * as well as fixmap mappings.
    */
    #define __VMALLOC_RESERVE (128 << 20)

    #ifndef __ASSEMBLY__

    /* Pure 2^n version of get_order */
    static __inline__ int get_order(unsigned long size)
    {
    int order;

    size = (size-1) >> (PAGE_SHIFT-1);
    order = -1;
    do {
       size >>= 1;
       order++;
    } while (size);
    return order;
    }

    #endif /* __ASSEMBLY__ */

    #ifdef __ASSEMBLY__
    #define __PAGE_OFFSET   (0xC0000000)
    #else
    #define __PAGE_OFFSET   (0xC0000000UL)
    #endif


    #define PAGE_OFFSET   ((unsigned long)__PAGE_OFFSET)
    #define VMALLOC_RESERVE   ((unsigned long)__VMALLOC_RESERVE)
    #define MAXMEM    (-__PAGE_OFFSET-__VMALLOC_RESERVE)
    #define __pa(x)    ((unsigned long)(x)-PAGE_OFFSET)
    #define __va(x)    ((void *)((unsigned long)(x)+PAGE_OFFSET))
    #define pfn_to_kaddr(pfn)      __va((pfn) << PAGE_SHIFT)
    #ifndef CONFIG_DISCONTIGMEM
    #define pfn_to_page(pfn) (mem_map + (pfn))
    #define page_to_pfn(page) ((unsigned long)((page) - mem_map))
    #define pfn_valid(pfn)   ((pfn) < max_mapnr)
    #endif /* !CONFIG_DISCONTIGMEM */
    #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)

    #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)

    #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
         VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)

    #endif /* __KERNEL__ */

    #endif /* _I386_PAGE_H */

  • 相关阅读:
    常用模块
    二分查找算法
    递归函数
    文件操作
    day02--Python基础二(基础数据类型)
    Python学习笔记day01--Python基础
    Python2X和Python3X的区别
    testdisk修复文件系统
    机器学习入门 快速版
    tableau教程 快速入门
  • 原文地址:https://www.cnblogs.com/doctorqbw/p/2376699.html
Copyright © 2020-2023  润新知