第一个驱动程序(在Ubuntu系统下运行)

一、构造内核源码树

# apt-cache search linux-source
# apt-get install linux-source-4.4.0(下载的源码在目录/usr/src下)
# 解压内核源码tar xjf .....
进入源码目录
# make oldconfig
# make
# make modules
make modules_install

ref:http://blog.chinaunix.net/uid-24782829-id-3211008.html

由于我主机本身内核版本就为4.4.0-21-generic,所以/lib/modules/4.4.0-21-generic/本身就存在,所以上述过程就不需要执行了。至此,构造内核源码树完成。

make时报错:

scripts/sign-file.c:23:30: fatal error: openssl/opensslv.h: 没有那个文件或目录 compilation terminated. scripts/Makefile.host:91: recipe for target 'scripts/sign-file' failed make[1]: *** [scripts/sign-file] Error 1 Makefile:566: recipe for target 'scripts

解决方法:ubuntu下缺少了如下的组件,安装一下即可

sudo apt-get install libssl-dev

二、在Linux下写驱动程序

源代码firstdrv.c:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/delay.h>

static int first_drv_open(struct inode *inode, struct file *file)
{
	printk("first_drv_open\n");
	return 0;
}

static ssize_t first_drv_write(struct file *file, const char __user *buf, size_t count, loff_t * ppos)
{
	printk("first_drv_write\n");
	return 0;
}

static struct file_operations first_drv_fops = {
    .owner  =   THIS_MODULE,    /* 这是一个宏,推向编译模块时自动创建的__this_module变量 */
    .open   =   first_drv_open,     
	.write	=	first_drv_write,	   
};

static int first_drv_init(void)
{
	register_chrdev(246, "first_drv", &first_drv_fops); // 注册, 告诉内核
	return 0;
}

static void first_drv_exit(void)
{
	unregister_chrdev(246, "first_drv"); // 卸载
}

module_init(first_drv_init);
module_exit(first_drv_exit);

MODULE_LICENSE("GPL");

makefile:

obj-m:=firstdrv.o  #注意.o文件名要和驱动程序文件名一致
CURRENT_PATH :=$(shell pwd)  
LINUX_PATH :=/lib/modules/4.4.0-21-generic/build
  
all:  
    make -C $(LINUX_PATH) M=$(CURRENT_PATH) modules  
clean:  
    make -C $(LINUX_PATH) M=$(CURRENT_PATH) clean  

# make 编译模块
# insmod firstdrv.ko
#lsmod 
#cat /proc/devices

测试程序firstdrvtest.c:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>

int main()
{
	int fd;
	int val=1;
	fd=open("/dev/xyz",O_RDWR);
	if(fd<0)
		printf("can't open\n");
	write(fd,&val,4);
	return 0;
}

# mknod /dev/xyz c 246 0 创建设备节点
# ./firstdrvtest 执行测试程序

2017/9/15目前的情况是firstdrv.c可以正常加载(insmod)到/proc/devices,lsmod命令也能够看到该模块,但是给/dev/xyz创建节点后,在执行firstdrvtest测试时,无法打开该文件。
这里写图片描述
2017/9/18切换成root用户执行./firstdrvtest可执行文件,文件可以打开,但没有按照模块中open和write函数指定的方式打印信息,打印信息只可以在日志中查看。查了原因,是因为printk函数运行在内核态,如果要让它显示到虚拟终端上,还要加上其他的配置,如果不更改printk函数的显示等级,只能用dmesg命令查看输出信息,我又花了点时间折腾了下修改printk的输出日志等级,但是不知道是哪里操作不对,也没有实现理想的效果,暂且把这个问题搁下,接下来学习如何实现设备模块自动设置设备号和设备节点先。
这里写图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 安装Ubuntu系统下AN515-45的显卡驱动主要分为以下几个步骤: 1. 首先,打开终端。可以使用键盘快捷键Ctrl + Alt + T来打开。 2. 在终端中,输入命令“sudo apt update”,然后按Enter键。该命令用于更新软件源,以便获取最新的驱动程序。 3. 输入命令ubuntu-drivers devices”来查看可用的显卡驱动程序。找到与你的显卡型号对应的驱动程序,并记下其名称。 4. 输入命令“sudo apt install <驱动程序名称>”来安装所选择的驱动程序。将"<驱动程序名称>"替换为你在第3步中找到的驱动程序名称。 5. 在安装过程中,会提示你输入密码,输入密码后按Enter键。另外,在安装过程中可能会提示你确认安装。按“y”键确认安装。 6. 等待驱动程序的安装完成。安装完成后,可以重启计算机。 7. 重启计算机后,登录Ubuntu系统。可以在设置或者系统菜单中找到“显示”或“图形设置”等相关选项,查看显卡驱动程序是否已经成功安装。 如果通过以上步骤无法成功安装显卡驱动程序,可以尝试以下几种解决方法: 1. 检查网络连接是否正常。可以尝试更换网络环境或使用有线连接。 2. 重新运行“sudo apt update”命令来更新软件源,并再次尝试安装驱动程序。 3. 在Ubuntu社区或ACER官方网站上寻找相关驱动程序,并按照其提供的安装指南进行操作。 请注意,安装显卡驱动程序可能会有一定的风险。在操作过程中,请确保备份重要数据,并仔细阅读相关文档和指南。如有其他问题,建议查阅相关技术论坛或联系ACER官方客服获取进一步的支持。 ### 回答2: 要在Acer AN515-45上安装Ubuntu系统下的显卡驱动,您可以按照以下步骤进行操作: 1. 打开Ubuntu系统并确保已连接到网络。 2. 在终端中运行更新命令以更新系统:sudo apt update 3. 在更新完成后,通过运行以下命令安装Ubuntu默认的开源显卡驱动"Mesa":sudo apt install mesa-utils 4. 安装完毕后,您可以重启计算机以使更改生效:sudo reboot 5. 重新启动后,在终端中运行以下命令以确认Mesa驱动是否正确安装并正在使用:glxinfo | grep "OpenGL version" 6. 如果您需要安装官方的AMD或NVIDIA显卡驱动,需要通过以下步骤进行: - 如果您使用的是AMD显卡,您可以通过终端运行以下命令以安装AMD官方驱动程序: sudo apt install amdgpu - 如果您使用的是NVIDIA显卡,您可以通过终端运行以下命令以安装NVIDIA官方驱动程序: sudo apt install nvidia-driver-xxx (xxx是您显卡型号对应的驱动版本号) 7. 安装完毕后,重新启动计算机以使更改生效:sudo reboot 8. 重新启动后,在终端中再次运行以下命令以确认新驱动是否正确安装并正在使用:glxinfo | grep "OpenGL version" 通过按照以上步骤进行操作,您应该能够在Acer AN515-45上成功安装并使用所需的显卡驱动。请注意,如果您遇到任何问题,建议参考相应显卡驱动的官方文档或社区支持以获取更详细的信息和帮助。 ### 回答3: 要在Acer Intro AN515-45上安装Ubuntu系统的显卡驱动,您可以按照以下步骤进行操作: 1. 首先,打开终端并输入以下命令以更新您的系统: sudo apt update sudo apt upgrade 2. 接下来,您需要确定您的显卡型号。您可以通过键入以下命令来获得该信息: sudo lshw -C display 在输出中找到您的显卡型号,例如"NVIDIA GeForce GTX 1650"。 3. 现在,您可以下载和安装适用于您的显卡型号的显卡驱动程序。对于NVIDIA显卡,您可以使用以下命令来安装官方驱动: sudo apt install nvidia-driver-<version> <version>应替换为您的显卡型号所需的驱动版本号,例如nvidia-driver-460。 4. 安装完毕后,重新启动系统以使改动生效: sudo reboot 5. 重新启动后,您的显卡驱动程序应该已成功安装。您可以通过键入以下命令验证安装情况: nvidia-smi 如果输出显示了有关您的显卡信息,则说明驱动程序已正确安装。 请注意,安装显卡驱动程序可能因显卡型号和Ubuntu版本而异。这只是一般步骤,具体操作可能因个体差异而有所不同。因此,建议您参阅官方文档或支持论坛以获取更准确的指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值