小编dag*_*dag的帖子

内置于自定义Linux内核的Initramfs未运行

我正在构建一个自定义initramfs映像,我将其构建为Linux内核(3.2)中的CPIO存档.

我遇到的问题是无论我尝试什么,内核似乎都不会尝试从initramfs运行.

我在CPIO档案中的文件:

cpio -it < initramfs.cpio
.
init
usr
usr/sbin
lib
lib/libcrypt.so.1
lib/libm.so
lib/libc.so.6
lib/libgcc_s.so
lib/libcrypt-2.12.2.so
lib/libgcc_s.so.1
lib/libm-2.12.2.so
lib/libc.so
lib/libc-2.12.2.so
lib/ld-linux.so.3
lib/ld-2.12.2.so
lib/libm.so.6
proc
sbin
mnt
mnt/root
root
etc
bin
bin/sh
bin/mknod
bin/mount
bin/busybox
sys
dev
4468 blocks
Run Code Online (Sandbox Code Playgroud)

Init很简单,应该只是初始化设备并生成一个shell(现在):

#!/bin/sh

mount -t devtmpfs none /dev
mount -t proc none /proc
mount -t sysfs none /sys
/bin/busybox --install -s
exec /bin/sh
Run Code Online (Sandbox Code Playgroud)

在内核.config我有:

CONFIG_INITRAMFS_SOURCE="../initramfs.cpio"
CONFIG_INITRAMFS_ROOT_UID=0
CONFIG_INITRAMFS_ROOT_GID=0
CONFIG_BLK_DEV_INITRD=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=32768
Run Code Online (Sandbox Code Playgroud)

内核构建和uImage大小取决于initramfs大小,因此我知道图像正在打包.但是我在启动时得到了这个输出:

console [netcon0] enabled
netconsole: network logging started
omap_rtc omap_rtc: setting …
Run Code Online (Sandbox Code Playgroud)

linux linux-kernel

21
推荐指数
1
解决办法
1万
查看次数

未知 HZ 值

我收到一条消息,打印出在 ARM 平台上运行的 Linux 应用程序 (Qt C++):

未知的 HZ 值!(108) 假设 100。

此输出在不同的应用程序中定期显示,括号中的值不同。

当我从基于 glibc 的工具链切换到基于 eglibc 的工具链以构建应用程序、内核和文件系统时,它开始发生。

似乎没有造成任何不良影响,至少不是直接的。

谁能解释一下这是什么意思?

c++ linux glibc libc

5
推荐指数
1
解决办法
4107
查看次数

删除派生对象时的行为

这是一个基于真实问题的虚构场景.如果我有一个基类:

class Vehicle
{
public:
     void run() { incrementStuff(); }
     virtual void incrementStuff() { } 
};
Run Code Online (Sandbox Code Playgroud)

派生类:

class Car : public Vehicle
{
public:
     Car() : Vehicle() { stuff = new StuffClass(); }
     ~Car()  { delete stuff; stuff = NULL; }

     virtual void incrementStuff() { if (stuff != NULL) stuff->increment(); } 

protected:
     StuffClass* stuff;
};
Run Code Online (Sandbox Code Playgroud)

然后说我有一个定期调用Vehicle :: run()的线程.我有另一个线程,最终删除指向汽车的指针.破坏的顺序将导致汽车首先被删除,然后是车辆.

如果线程(生活在Vehicle对象中)在析构函数在汽车中运行之后调用incrementStuff函数会发生什么(但显然在车辆被破坏之前)?是否会执行Car :: incrementStuff并尝试取消引用已删除的指针?或者将调用Vehicle :: incrementStuff哪个是安全的,什么都不做?

假设在Car ::〜Car()运行时线程无法调用Car :: incrementStuff(这是由互斥锁阻止的).

这段代码已被重构以避免这种情况,但我只是想知道是否有人可以阐明它是如何工作的,或者它是否只是简单的未定义行为?

更一般地说,如果我在Car被破坏之后但是在车辆出现之前尝试调用Car :: incrementStuff会发生什么?NULL检查是否有效,或者该内存是否已经解除分配并且现在可以被任何内容使用?或者,在基础对象被破坏之前,该内存是否已"释放"?

c++ inheritance destructor

2
推荐指数
1
解决办法
111
查看次数

标签 统计

c++ ×2

linux ×2

destructor ×1

glibc ×1

inheritance ×1

libc ×1

linux-kernel ×1