Articles of Linux操作系统

在Linux上debugging一个简单的字符驱动程序在device_create()上失败

我写了一个简单的字符驱动程序,现在想在udev中使用类自动注册它。 我的代码由驱动程序加载时调用的init函数和驱动程序加载其设备时调用的probe函数组成(当然还有它们的等价的exit和remove )。 问题:一旦添加新设备,执行device_create命令时,我的probefunction失败。 现在我想知道为什么: 我怎么能得到更多的信息,为什么这个命令失败(除了失败)? 缺less任何参数(比如我的全局声明fooClass是否存在问题,是否应该将其移至probe函数,而不是在我眼中做出反应,但在许多示例中显示)? 还是其他监督错误? 我的代码我剥离了大多数返回validation(如IS_ERR() )和清理function的可读性。 这两个variables是全局定义的: static int foo_majNbr; static struct class *fooClass; init函数: static int __init foo_init(void) { int rv; dev_t devNbr; /* Registering driver */ rv = pci_register_driver(&foo_driver); /* —-> see answer below for correct order <—- */ /* Create device class */ fooClass = class_create(THIS_MODULE, CLASS_NAME); /* […]

/usr/include/gnu/stubs.h:7:27:error:gnu / stubs-32.h:没有这样的文件或目录

我正在尝试安装roccc 2.0 。 我已经安装了所需的包。 现在在安装时,它给了我这个错误: /usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory 我search了gnu/stubs-32.h ,结果发现,对于Linux 64位, glibc-devel和Linux 32位, libc6-dev-i386 。 我正在使用Linux 32位:i386 GNU / Linux,但无法获得解决此错误所需的lib 。 有人可以帮我吗?

有没有办法在设置dpkg控制文件时自动确定依赖关系?

dpkg(Debian)控制文件中的大部分字段都很简单。 棘手的是确定依赖列表(取决于:)。 我希望dpkg-gencontrol可以通过查看软件包目录中的可执行文件的ldd输出来实现这一点。 也许可以,但我不能得到它的工作。 如果这是dpkg-gencontrol目的,我得到的错误是: dpkg-gencontrol: error: syntax error in control_template at line 7: first block lacks a source field. 作为参考,命令是dpkg-gencontrol -v1.1 -ccontrol_template -lchangelog -Pdebian 。 control_template文件包含这个: Package: my-package Maintainer: Joe Coder <joe@coder.com> Description: The my-package system A longer description that runs to the end of one line and then extends to another line. Priority: […]

如何确定一个文件是否是一个链接?

我有下面的代码只有它的一部分显示在这里 ,我正在检查如果文件的types。 struct stat *buf /* just to show the type buf is*/ switch (buf.st_mode & S_IFMT) { case S_IFBLK: printf(" block device\n"); break; case S_IFCHR: printf(" character device\n"); break; case S_IFDIR: printf(" directory\n"); break; case S_IFIFO: printf(" FIFO/pipe\n"); break; case S_IFLNK: printf(" symlink\n"); break; case S_IFREG: printf(" regular file\n"); break; case S_IFSOCK: printf(" socket\n"); […]

“总线错误”系统错误

我正在运行一个使用一些系统库的Linux工具,就像我们一些自定义库一样。 该工具的目的是访问/configuration有一些固件运行的PCI Express卡。 我对代码做了一些细微的改动,没有什么意义,突然发现了“总线错误”。 我知道这是由未alignment的内存访问引起的,但是在上面的情况下,它更可能在固件内存中,即通过PCI-Express总线读取固件。 我当然不相信我的小软件改变可能会导致“总线错误”。 另一个令人惊讶的事实是,不同版本的软件在这个固件上运行良好。 任何人都可以对这个问题提出一些看法。

如何删除一个shell脚本中的string的所有发生的点?

例如hostname =“test.test.test”,那么去除结果后应该像“testtesttest”

Linux内核模块编程:makefile

在学习Linux内核模块的同时,我可以看到两种方式来编写Makefile。 第一个是这样的: ifneq ($(KERNELRELEASE),) obj-m := module.o else default: $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules endif 后者不那么复杂: obj-m := module.o all: $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules makefile编译导致成功编译模块 。 我的学习伴随着LDD3书,至今我读到的是下一个: 这个makefile在典型的版本上被读取两次。 当从命令行调用makefile时,会注意到KERNELRELEASEvariables没有被设置。 它通过利用已安装模块目录中的符号链接构build指向内核构build树的事实来定位内核源代码目录。 如果你实际上没有运行正在构build的内核,你可以在命令行提供一个KERNELDIR =选项,设置KERNELDIR环境variables,或者重写在makefile中设置KERNELDIR的行。 一旦find内核源代码树,makefile会调用默认:target,它将运行第二个make命令(在makefile中参数化为$(MAKE))来调用内核构build系统,如前所述。 在第二次阅读时,makefile设置obj-m,内核makefiles负责实际构build模块。 如果makefile被读取两次,那么第二种方法应该导致recursion,不是吗?

在linux上启用GD的PHP for imagecreatefromstring函数并发送电子邮件

我已经在Amazon Cloud上部署了我的PHP Web应用程序。 我已经在服务器上安装了PHP和mySql。 但是我的PHP安装不支持在我的开发机器上默认的XAMPP安装中存在的一些function。 不起作用的function是imagecreatefromstringfunction和电子邮件发送function,因为在服务器上安装PHP没有所需的文件需要包括,以便从string创build图像和发送电子邮件。 我已经尝试在服务器上手动安装一些rpm包,但是它们与现有的包相冲突。另外,我对Linux没有太多的了解。 我应该怎么做,我应该在服务器上创build一个新的PHP安装,这次我想我应该用XAMPP进行Linux安装,因为XAMPP安装提供了所有的基本function。 如果可能的话,还有一种方法是将这两个任务所需的一些required.php文件手动放在各自的目录中。 不知道这种方法是否可行。 如果您有类似的经验或知识,请帮助。 具有这些function的脚本在本地Windows开发机器上运行良好。

GNU并行的“find”和“ls”

我正在尝试使用GNU parallel将大量文件发布到Web服务器。 在我的目录中,我有一些文件: file1.xml file2.xml 我有一个如下所示的shell脚本: #! /usr/bin/env bash CMD="curl -X POST -d@$1 http://server/path" eval $CMD 脚本中还有一些其他的东西,但这是最简单的例子。 我试图执行以下命令: ls | parallel -j2 script.sh {} 这是GNU parallel页面显示的“正常”方式来操作目录中的文件。 这似乎将文件的名称传递到我的脚本,但curl抱怨说,它不能加载传入的数据文件。但是,如果我这样做: find . -name '*.xml' | parallel -j2 script.sh {} 它工作正常。 ls和find是如何将parameter passing给我的脚本的? 或者我需要在脚本中另外做些什么?

一个经典的StackOverflow:Java Swing

问候大家! 我在Windows下使用Java Swing编程GUI应用程序。 在Windows下一切正常。 现在我正在Linux下尝试它(使用发行版Linux Mint 7)。 我得到和讨厌的StackOverflowException,当我调用帧的处理方法 ! 有问题的框架是JDialog组件。 这是一些输出:编辑,完整的输出 run: Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:616) at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:261) at java.beans.Statement.invoke(Statement.java:231) at java.beans.Expression.getValue(Expression.java:115) at java.beans.DefaultPersistenceDelegate.doProperty(DefaultPersistenceDelegate.java:227) at java.beans.DefaultPersistenceDelegate.initBean(DefaultPersistenceDelegate.java:264) at java.beans.DefaultPersistenceDelegate.initialize(DefaultPersistenceDelegate.java:408) at java.beans.PersistenceDelegate.writeObject(PersistenceDelegate.java:116) at java.beans.Encoder.writeObject(Encoder.java:74) at java.beans.XMLEncoder.writeObject(XMLEncoder.java:274) at java.beans.Encoder.writeExpression(Encoder.java:304) at java.beans.XMLEncoder.writeExpression(XMLEncoder.java:389) at java.beans.DefaultPersistenceDelegate.doProperty(DefaultPersistenceDelegate.java:229) at java.beans.DefaultPersistenceDelegate.initBean(DefaultPersistenceDelegate.java:264) at java.beans.DefaultPersistenceDelegate.initialize(DefaultPersistenceDelegate.java:408) at java.beans.PersistenceDelegate.writeObject(PersistenceDelegate.java:116) at […]