- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我需要为 Raspbian Linux 内核添加一个自己的系统调用。现在我在搜索了大约 2 天以找到解决方案后陷入困境。
要加一个系统调用,我基本上是按照大纲来的( http://elinux.org/RPi_Kernel_Compilation ) 使用来自以下 git repo 的内核源代码:
git://github.com/raspberrypi/tools.git
我已经使用 crosstool-ng ( http://www.kitware.com/blog/home/post/426 ) 安装了交叉编译环境。
以上所有这些都有效。我能够编译和部署新内核。此外,我还能够为 Raspbian 进行交叉编译。
我正在尝试添加“hello world”系统调用。该函数驻留在它自己的实现文件 (kernel/helloworld.?) 中并实现为:
helloworld.c:
#include
#include
#include
#include "helloworld.h"
asmlinkage long sys_helloworld(){
printk (KERN_EMERG "hello world!");
return get_random_int()*4;
}
helloworld.h:
#ifndef HELLO_WORLD_H
#define HELLO_WORLD_H
asmlinkage long sys_helloworld(void);
#kết thúc nếu
相应地扩展了 Makefile。
我现在卡在错误信息中了
AS arch/arm/kernel/entry-common.o
arch/arm/kernel/entry-common.S: Assembler messages:
arch/arm/kernel/entry-common.S:104: Error: __NR_syscalls is not equal to the size of the syscall table
make[1]: *** [arch/arm/kernel/entry-common.o] Error 1
遵循 Writing a new system call 中的建议,我添加了以下内容:
arch/arm/kernel/calls.S
CALL(sys_helloworld)
arch/arm/include/uapi/asm/unistd.h
#define __NR_helloworld (__NR_SYSCALL_BASE+380)
include/uapi/asm-generic/unistd.h
#define __NR_helloworld 274
__SYSCALL(__NR_helloworld, sys_helloworld)
#define __NR_syscalls 275
arch/x86/syscalls/syscall_32.tbl
351 i386 helloworld sys_helloworld
我现在陷入了解决错误的困境。
当删除 calls.S 中的行时,内核编译正常;虽然我不能调用系统调用。添加上述行时,出现上述错误。
供引用:用于测试系统调用的客户端代码是:
#include
#include
#include
int main (int argc, char* argv[])
{
int i=atoi(argv[1]);
int j=-1;
printf("invocing kernel function %i\n", i);
j=syscall(i); /* 350 is our system calls offset number */
printf("invoked. Return is %i. Bye.\n", j);
trả về 0;
}
所有其他系统调用(例如,1 == sys_exit)工作正常。
知道我遗漏了什么吗?例如,我不完全了解如何实现 rasens 答案。
câu trả lời hay nhất
_NR_syscalls
hiện hữu arch/arm/include/asm/unistd.h
文件中定义,此值将始终为 __NR_last_syscall+1
。因此,在您的情况下,_NR_syscalls
应修改为 381,但由于系统调用表中的填充,此更改也会产生相同的错误。因此将其定义为 384。这样可以解决编译错误。以下更改不是必需的:
include/uapi/asm-generic/unistd.h
#define __NR_helloworld 274
__SYSCALL(__NR_helloworld, sys_helloworld)
#define __NR_syscalls 275
arch/x86/syscalls/syscall_32.tbl
351 i386 helloworld sys_helloworld
关于linux - 为 Arm/Raspberry PI 扩展 Rasbian 内核(Linux 内核 3.10.28)——如何正确添加自己的系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21554267/
Tôi rất quan tâm đến nhân Linux và hệ điều hành nói chung. Điều tôi muốn biết là loại tệp hoặc phần mở rộng của kernel là gì? Rõ ràng là nó không có phần mở rộng .exe hoặc .out, vì chúng được sử dụng cho các ứng dụng được cài đặt trên hệ điều hành. Hạt nhân chỉ là một hệ nhị phân
Tôi cần thêm lệnh gọi hệ thống riêng vào nhân Raspbian Linux. Bây giờ tôi bị mắc kẹt sau khi tìm kiếm khoảng 2 ngày để tìm giải pháp. Để thêm một cuộc gọi hệ thống, về cơ bản tôi đã làm theo phác thảo ( http://elinux.org
Đối với một dự án học thuật, tôi muốn thêm một tệp nguồn (myfile.c) vào thư mục kernel/, cùng thư mục với exit.c và fork.c. Hệ thống xây dựng dường như không tự động nhận tệp mới vì Tôi đang ở trong hàm được xác định bởi myfile.c
Bảng xếp hạng trình duyệt Bảng xếp hạng thị phần trình duyệt Bảng xếp hạng toàn cầu. Danh sách xếp hạng thị phần trình duyệt tại Trung Quốc - Kuai Technology. Nếu chúng ta nhìn vào lõi trình duyệt, thị phần cốt lõi của Chrome chắc chắn là lớn nhất, với một công ty đang thống trị thị trường.
Với cấu trúc tác vụ cho một tiến trình hoặc luồng, thành ngữ lặp lại trên tất cả các luồng khác thuộc cùng một tiến trình là gì? Câu trả lời hay nhất Linux không phân biệt giữa tiến trình (tác vụ) và luồng. Thư viện gọi fork() và pthread_create() sử dụng cùng một hệ thống
Tôi đang tạo kernel từ đầu trong C (không phải linux. Hoàn toàn từ đầu) và tôi đang gặp một số vấn đề. Tôi có mã này: #include "timer.h" int ms = 0; void time_handler(
Tôi đang tạo hạt nhân C từ đầu và tôi thực sự chỉ sao chép mã này từ một trang web và tôi bối rối vì mã của tôi không hoạt động. void kmain(void) { const char *str = "f của tôi
Tôi không chắc liệu mình có hiểu hết sự khác biệt ở trên hay không, vì vậy tôi sẽ tự giải thích và bạn có thể ngắt lời tôi nếu tôi sai: "Nhân là đoạn mã đầu tiên tạo ra một luồng nhân. Một luồng nhân là một tiến trình được quản lý bởi người dùng Một luồng là một phần của tiến trình nếu bạn có một tiến trình đơn luồng.
Hãy xem định nghĩa tệp cấu trúc từ mã này nhân Linux phiên bản 2.6.18. Tôi đang cố gắng so sánh hai biến tệp cấu trúc trong mã của mình và xác định xem chúng có tham chiếu đến cùng một tệp hay không. trong cấu trúc này
Tôi đang cố gắng làm cho đèn LED trong thiết bị nhúng nhấp nháy khi Linux khởi động. Về cơ bản, đèn LED nhấp nháy cho biết Linux đang khởi động. Để làm cho đèn LED nhấp nháy, tôi thực hiện như sau.
Tôi có một số phần cứng cụ thể chạy trên FreeBSD và Linux. Tôi phải tạo một ứng dụng không gian người dùng sẽ hoạt động với trình điều khiển sử dụng bộ nhớ dùng chung giữa ứng dụng kernel/không gian người dùng. Ứng dụng của tôi đang bận trên bộ nhớ dùng chung từ không gian người dùng
Tôi có thể tìm lời giải thích về các chức năng tương ứng trong nhân linux ở đâu, đặc biệt là đối với ICMPv4? Ví dụ: icmp_reply, icmp_send, v.v. Cảm ơn sự giúp đỡ của bạn. Hay nhất, câu trả lời hay nhất của Alimu để khám phá nhân Linux
Tôi đang làm việc trên Linux Kernel 3.4 và tôi có đoạn mã sau: /* Giá trị hiệu chỉnh cảm biến tiệm cận */ unsigned int als_kadc;
Tôi đang đọc "Phát triển hạt nhân Linux phiên bản thứ 3 của Robert Love" để có cái nhìn tổng quan về cách hoạt động của nhân Linux.. (2.6.2.3) Tôi không hiểu cách hoạt động của hàng đợi chờ, chẳng hạn như việc tạo đoạn văn này
Tôi đã từng hỏi câu hỏi tương tự trước đây nhưng bài đăng của tôi đã bị xóa vì lý do nào đó. Dù sao, tôi đang cố gắng sử dụng C++ và viết một chương trình cho phép tôi truy cập trực tiếp vào bộ nhớ và ghi vào nó. Tôi nghe nói rằng tôi cần phải làm gì đó với kernel vì nó là liên kết giữa hệ điều hành và ứng dụng
Trong khi cố gắng tìm hiểu các phương thức thực thi của Ruby, tôi tìm thấy bài đăng trên blog này về năm cách để chạy các lệnh trong Ruby http://mentalized.net/journal/2010/03/08/5_ways_to_run
Có bản phân phối Linux nào (ngoài Minix) có tài liệu mã nguồn tốt không? Ngoài ra, có tài liệu nào hay mô tả mã nguồn Linux nói chung không? Tôi đã tải xuống mã nguồn hạt nhân, nhưng (không có gì đáng ngạc nhiên) tôi hơi choáng ngợp và muốn biết liệu có mã nguồn nào không?
Có ai biết hàm hoặc tệp nào trong linux chứa thuật toán tìm cổng ngẫu nhiên cho lệnh gọi hệ thống bind() không? Tôi đã tìm khắp nơi và không thể tìm ra cách đưa thuật toán này vào mã nguồn Linux. Cảm ơn bạn! Câu trả lời hay nhất Đây là một đoạn mã dài và phức tạp,
Lời nói đầu Trước hết, độc giả có trình độ chuyên môn có thể bỏ qua loạt bài này. Mục đích chính của những bài viết này là giúp những độc giả không chuyên về khoa học hiểu được kiến thức cơ bản thông qua những tóm tắt đơn giản, dễ hiểu, đồng thời hiểu rõ hơn lý do tại sao những vấn đề cơ bản này lại được đưa vào các cuộc phỏng vấn. Nếu không, một số khái niệm sẽ luôn
Sự khác biệt và tính năng giữa CentOS7.2 và CentOS6 Quá trình khởi động hệ điều hành Linux trước tiên bắt đầu từ BIOS, sau đó vào bộ tải khởi động, tải kernel và khởi chạy kernel. Hạt nhân được khởi tạo
Tôi là một lập trình viên xuất sắc, rất giỏi!