我正在尝试使用MTD块设备在NAND闪存上写,但我不明白一切.
我在这里读到
mtdblockN 是只读块设备N.mtdN 是读/写字符设备N.mtdNro 是只读字符设备N.但是我想用writeC中的一个简单的方法直接将字节写入分区,我不明白它是如何工作的(我读过一些我首先必须删除我要写的扇区).
我应该使用哪种设备以及如何在此设备上书写?
我正在尝试将静态库的某些部分链接到 Linux 下使用 g++ 用 C++ 编写的程序中。
my_lib.h
#ifdef USE_EXTERN_LIB
# include <extern_lib.h>
void do_something (struct extern_lib);
#endif
void do_other (int);
Run Code Online (Sandbox Code Playgroud)
my_lib.c
#include "my_lib.h"
#ifdef USE_EXTERN_LIB
void do_something (struct extern_lib l)
{
// do something
}
#endif
void do_other (int a)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
我使用 -DUSE_EXTERN_LIB 预处理器标志静态创建 libmy_lib.a 以将所有内容包含到其中。
但我想做的是创建两个程序:一个将这个库与 *extern_lib* 一起使用,另一个在不使用 *extern_lib* 的情况下使用它,即:
g++ -L/path/to/lib -lmy_lib -o prog_wihtout_lib prog_without_lib.cc
g++ -DUSE_EXTERN_LIB -L/path/to/lib -lmy_lib -o prog_with_lib prog_with_lib.cc
Run Code Online (Sandbox Code Playgroud)
第二个程序可以编译,但第一个程序不能编译,它说 extern_lib 未声明。
使用动态库,没有问题,因为符号是在运行时加载的,但我想要一个静态库。有没有办法只链接静态库所需的模块?
编辑
prog_without_lib.cc
#include "my_lib.h"
int main …Run Code Online (Sandbox Code Playgroud) 我正在尝试切换到intel x86中的保护模式.
我已经用lgdt加载了我的gdt,将cr0的P标志设置为1和所有段选择器但是当我从函数调用返回时,我无法调用任何其他函数或者我得到此错误
qemu: fatal: Trying to execute code outside RAM or ROM at 0xfeeb7c5b
Run Code Online (Sandbox Code Playgroud)
这是我的switch_to_pmode函数:
gdtr:
.short 23 // limit
gdtr_base:
.long 0 // base
switch_to_pmode:
movl $null_segment, %eax // Address of the first byte of the GDT
movl %eax, gdtr_base
cli // disable interrupts
lgdt (gdtr)
movl %cr0, %eax
or $0x1, %eax
movl %eax, %cr0 // Set the PE flag
push $0x8
push $reload_segments
lret
reload_segments:
movl $0x10, %eax
movl %eax, %ds
movl %eax, %ss
movl %eax, %es …Run Code Online (Sandbox Code Playgroud)