我正在编译内核模块,它有很多编译错误.运行"make"后,抛出的错误太多,无法放入屏幕.向上滚动没有达到第一个错误.我尝试通过make&2> log来捕获错误,这些错误不起作用(日志文件为空并且错误消息仍然被转储到屏幕上).
有人可以告诉我如何将编译期间生成的所有消息记录到日志文件中吗?
我在我的C文件中创建了一个名为.co_stack的部分,并有一个名为pulStack的数组来定义该区域.
#define STACK_SIZE 0x00003000 /*!< Stack size (in Words) */
__attribute__ ((section(".co_stack")))
unsigned long pulStack[STACK_SIZE];
Run Code Online (Sandbox Code Playgroud)
我定义堆栈部分的gcc链接器脚本如下所示
.co_stack : {
_fstackptr = ORIGIN(ram) + LENGTH(ram) - 4;
_fstacksize = 0x00003000 * 4;
. = (_fstackptr - _fstacksize);
*(.co_stack .co_stack.*)
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我最终在2个位置定义堆栈大小.一个是我的.c文件中的STACK_SIZE和我的.ld文件中的_fstacksize.
我怎样才能在一个地方定义它?
例如,我想创建一个变量pulStackSize,如下所示.
const unsigned long pulStackSize = sizeof(pulStack);
Run Code Online (Sandbox Code Playgroud)
我想在.ld文件中定义_fstacksize为
_fstacksize = STACK_SIZE * 4;
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我得到一个错误,说堆栈溢出48K字节.
如何将.c中的符号导入我的.ld文件?
我正在使用标准命令编译一个内核模块,其中包含大小为 34 的结构。
make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
Run Code Online (Sandbox Code Playgroud)
将以sizeof(some_structure)36 而不是 34 的形式出现,即编译器正在填充结构。
如何删除此填充?
运行make V=1显示 gcc 编译器选项传递为
make -I../inc -C /lib/modules/2.6.29.4-167.fc11.i686.PAE/build M=/home/vishal/20100426_eth_vishal/organised_eth/src modules
make[1]: Entering directory `/usr/src/kernels/2.6.29.4-167.fc11.i686.PAE'
test -e include/linux/autoconf.h -a -e include/config/auto.conf || ( \
echo; \
echo " ERROR: Kernel configuration is invalid."; \
echo " include/linux/autoconf.h or include/config/auto.conf are missing."; \
echo " Run 'make oldconfig && make prepare' on kernel src to fix it."; \
echo; \
/bin/false)
mkdir -p /home/vishal/20100426_eth_vishal/organised_eth/src/.tmp_versions ; …Run Code Online (Sandbox Code Playgroud)