我使用ct-ng为arm编译了一个交叉工具。我通过编译hello.c来测试它,只需打印" hello world",然后将其下载到工作板上,就可以了。 但是使用它来编译内核并下载到主板,内核启动失败。根文件系统由相同的交叉工具编译。
该工具的组合是: 内核2.26.32.61 GCC-4.8.1 的glibc-2.17 的binutils-2.22 GDB-7.4.1
工作内核版本是2.26.31.2。我使用交叉工具来编译内核2.6.32.61。我确信内核源代码和busybox源代码将会工作,因为通过交叉工具arm-linux-gcc编译它们4.3.2从Internet上下载并且一切正常。(我使用busybox创建根fs。)
这是由同一个内核的版本引起的问题吗?
我检查我做了什么,但仍然无法找到。
从串行输出,它说的第一个错误"无法处理虚拟地址00000001处的内核NULL指针取消引用\ n pgd = c0004000"。
从System.map中,我找到" c0004000"映射到"一个swapper_pg_dir"。
我注意到我的交叉工具编译的坏内核比工作小的内核小,只有3664B。但我不知道实际上缺少了什么。
答案 0 :(得分:0)
一旦我为4.6编写的内核有类似的问题,但用4.8构建。通过向KBUILD_CFLAGS添加cflag -ffreestanding进行修复。也许这也是你的情况?