我正在为操作系统开发内核.为了执行它,我决定使用GRUB.目前,我已经连接到GRUB的脚本stage1,stage2,垫文件,这使得它可引导内核本身一起.唯一的问题是,当我运行它时,你必须让GRUB知道内核的位置和手动的大小然后启动它,如下所示:
kernel 200+KERNELSIZE boot
KERNELSIZE是块中内核的大小.这很好,一开始就没问题,但是可以在二进制文件中获取这些值并使GRUB自动启动内核吗?有关如何实现这一目标的任何建议?
我一直在为BeagleBoard 的Angstrom Linux发行版工作.任何人都可以指点我的bitbake和OpenEmbedded如何实际工作的教程或参考?例如,当我像这样调用bitbake时:
bitbake virtual/kernel
Run Code Online (Sandbox Code Playgroud)
实际发生了什么?我已经研究了Angstrom的配方并搜索了Angstrom文件系统,但我似乎无法找到对虚拟或内核的引用.我觉得使用这个工具链并制作内核补丁并没有真正了解bitbake的工作方式,我感到有点沮丧.
我想知道第一次启动和后续启动时的情况.
我正在编译自己的内核,并希望它尽可能精简.我想手工构建.config文件(主要是作为学习经验),所以我需要知道可以排除的所有内容.我知道一个可能的解决方案是查看我当前的发行版加载驱动程序列表.但是,我很好奇我的发行版如何发现最初要加载的驱动程序.
TIA.
我正在编写一个小内核,只是为了解决一些低级别的问题.现在,它在Virtual Box中启动,我可以在屏幕上显示文本,分配一些内存,以及其他非常基本的东西.它是用C++和一点点asm编写的.
我想探索的一件事是多任务背后的机制.据我了解,它是这样的:
因此,它在概念上似乎很简单,但我知道细节会变得更加毛茸茸.我发现了一些在线的东西,但术语变化很大,而且这些例子似乎来自我没有的上下文(比如Linux内核中的内容).
但是,设置描述符表的方式似乎是这样的:
outb以及什么不是)以初始化它.lidt.但是,我找不到具体做这些事情,或者这是否正确.有没有人有一个困惑的内核作家的资源?
我正在尝试创建一个简单的内核模块.我正在尝试将消息打印到dmesg,但我一直在努力
insmod:init_module'hello.ko'在android中失败(Exec格式错误)
之后:dmesg:未知搬迁:27
#include <linux/module.h>
#include <linux/kdb.h>
int init_module(void)
{
printk(KERN_ALERT "Hello world!\n");
return 1;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
MODULE_AUTHOR("Robert P. J. Day");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_VERSION("2:1.0") ;
MODULE_DESCRIPTION("You have to start somewhere.");
Run Code Online (Sandbox Code Playgroud)
make文件
obj-m +=hello.o
KERNELDIR ?= ~/android/kernel/common
#KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
CROSS_COMPILE=~/android-ndk-r8/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-
ARCH=arm
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(PWD) clean
rm *.symvers
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么?以及如何使它工作?
我在做了一个readelf之后发现,当它被编译时,重定位部分指向了错误的方向.
Offset Info Type Sym.Value Sym. Name
00000008 0000171b …Run Code Online (Sandbox Code Playgroud) 所以这个问题的标题几乎总结了我的问题.为了清楚起见,我理解内核是什么以及为什么我们制作它们.我想知道它名字的由来.到目前为止,我所有的goggling和维基百科只发现了内核是什么,它的形式各不相同.
我在内核编程新手和我要运行这个内核模块(贴在下面)......我跑了生成文件(贴在下面),但我收到以下错误:可有人请帮助我了解如何克服这一点:内核程序应该没有错误运行,因为它来自英特尔的实现:
obj-m += hello-1.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Run Code Online (Sandbox Code Playgroud)
这是错误:
snehil@ubuntu:~/Desktop/measure$ make
make -C /lib/modules/3.0.0-12-generic/build M=/home/snehil/Desktop/measure modules
make[1]: Entering directory `/usr/src/linux-headers-3.0.0-12-generic'
CC [M] /home/snehil/Desktop/measure/measure1.o
/home/snehil/Desktop/measure/measure1.c: In function ‘hello_start’:
/home/snehil/Desktop/measure/measure1.c:108:2: error: implicit declaration of function
‘kmalloc’ [-Werror=implicit-function-declaration]
/home/snehil/Desktop/measure/measure1.c:108:8: warning: assignment makes pointer from
integer without a cast [enabled by default]
/home/snehil/Desktop/measure/measure1.c:115:11: warning: assignment makes pointer from
integer without a cast [enabled by default]
/home/snehil/Desktop/measure/measure1.c:124:12: warning: assignment makes pointer …Run Code Online (Sandbox Code Playgroud) 我在ubuntu linux上的端口80上有一个监听套接字.
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 12248/nginx
Run Code Online (Sandbox Code Playgroud)
有没有办法获得该套接字的backlog值(发送给listen()调用的backlog值)?
我知道我可以查看nginx配置,但配置文件可以更改而无需使用新配置重新加载nginx,因此配置和实际LISTEN调用中的backlog参数可能不同.
在Windows上,我的平台是x86和x86-64.
中断优先级系统的要点是让最高优先级的中断超过其他中断.为了强制执行此操作,我猜测Windows将完全禁用所有较低级别的中断,直到更高级别中断的ISR完成为止.
但如果CPU没有收听中断,会发生什么?他们只是默默地消失了吗?或者他们是否在硬件中排队,等待中断再次启用?如果存放,在哪里?有多少人可以排队?如果有太多中断没有被处理,会发生什么?如果存在中断处理积压的罕见情况,检测问题的工具是什么?
我在我的设备上运行Android 4.4.3,当然它已经过时了,我正在尝试更新/ system/usr/share/zoneinfo中的tzdata.但是,立即替换文件不会更新时区.
由于ICU保留了自己的时区数据副本,我们也必须更换它(根据谷歌AOSP团队).更新后的数据文件更新ICU和更新仿生
但是,当我构建并替换icu4c库(libicui18n.so和libicuuc.so)并将icudt51l.dat替换为icudt53l.dat时,系统无法初始化ICU.
我已经尝试解压缩icudt53l.dat并在旧的icudt51l.dat中推送其*.res文件但是也失败了因为ICUPKG工具在打包之前检查res文件的校验和.
我按照XDA链接更新了tzdata,但是这种方法失败了,因为他们使用tzdata 创建了zoneinfo.dat,zoneinfo.idx,zoneinfo.version文件.但是系统在/ system/usr/share/zoneinfo中查找tzdata本身
我不是时区或ICU专家,如果我朝错误的方向寻求帮助,请指点我.
kernel ×10
linux ×3
android ×2
linux-kernel ×2
module ×2
osdev ×2
beagleboard ×1
definition ×1
driver ×1
grub ×1
icu ×1
interrupt ×1
kmdf ×1
makefile ×1
nginx ×1
openembedded ×1
performance ×1
tcp ×1
timezone ×1
x86 ×1