Linux学习笔记

本文介绍了Linux驱动开发中private_data的使用,如何通过它访问设备结构体,并在应用程序关闭时处理。接着详细讨论了S3C2440的初始化过程,包括关闭看门狗、设置栈指针和调用main函数。此外,解释了BL指令的作用以及C语言中访问寄存器地址的宏定义方式。最后,探讨了C语言中的按位操作,用于精确地修改内存位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、关于 private_data

在驱动开发中,大部分的Linux驱动工程师会遵循一个规则,就是将文件的私有数据private_data  指向设备结构体,在read (),  write(),  ioctl(), llseek()等函数中通过private_data 访问设备结构体。 这是因为在这些函数的原型参数中没有struct  inode* 这个结构体。这样就很容易封装好设备结构与字符设备的内容,而在字符设备的关闭中则不做任何动作,因为当应用程序关闭打开的驱动文件之后,我们的驱动只需要返回一个0  表示返回成功即可。


2、s3c2440的初始化

启动从是从0 地址开始运行的,如果从NAND FLASH 启动会把前4k拷贝到片内SRAM,  若果从NOR FLASH 启动会直接指向NOR FLASH 的 0 地址启动;对2440进行初始化的时候,需要关闭看门狗,WATCON寄存器地址为0x53000000,写入0x0就关闭了;

其实启动文件就是一个硬件的初始化(2440就是关闭看门狗,初始化时钟(不必需),初始化SDRAM(不必需))和软件初始化(设置栈sp指针,设置返回地址,调用main函数,)

LDR SP,4*1024;设置了4K的栈,这就初始化完毕了

片内SRAM不用初始化就可以使用;


3、BL指令

BL  main;  指令即跳转指令,跳转到main,同时把返回地址保存到  LR寄存器里面;


4、C语言的内寄存器地址宏定义描述

define GPBCON     (*(volatile  unsigned long *)0x53000000) //volatile关键字是避免该条指令被编译器优化掉

int main(){   GPBCON=0X00000100;    }

其实上面语句就好像是 int a;  int *p;  p =&a ;  那么怎么给a 赋值,其中一种就是 *p=5;  p就是等于(int *)0x53000


5、C语言中的按位操作,可以避免影响到其他为;(清零 &,  置1 用| )

例如想把 a的第 3 位清零; a= a& ~(1<<3);  也就是 a &=~(1<<3);

例如想把 a的第3 位置1 ; a |=(1<<3);






### 关于 Linux 的学习资料 以下是针对 Linux 学习的一些推荐资源和教程: #### 1. 尚硅谷 Linux 学习笔记 尚硅谷提供了详尽的 Linux 学习笔记,涵盖了基础到高级的内容。这些笔记不仅包含了常用的命令操作,还涉及服务器配置、网络管理等方面的知识[^1]。 #### 2. CentOS 官方文档 CentOS 是一种广泛使用的 Linux 发行版,在企业环境中非常流行。官方文档中详细介绍了如何安装、配置和维护 CentOS 系统,适合初学者和中级用户深入研究[^3]。 #### 3. 高级命令实践指南 除了常见的 `ls`、`cd` 等基本命令外,掌握一些高级命令对于提升效率至关重要。例如: - **find**: 查找文件或目录。 - **df**: 显示磁盘空间使用情况。 - **tar**: 打包压缩工具。 - **ps/top/netstat**: 进程管理和监控网络状态。 另外还有更复杂的命令组合技巧可以提高工作效率,比如通过管道符 (`|`) 结合多个命令完成复杂任务。 #### 4. 内核编译与模块加载 如果计划深入了解操作系统层面,则需要了解内核源码结构及其构建过程。例如解决因缺少头文件链接而无法正常编译驱动程序的问题时,可参照如下方法创建软连接来修复路径错误: ```bash sudo ln -s /usr/src/kernels/3.10.0-1160.el7.x86_64/include/generated/uapi/linux/version.h \ /usr/src/kernels/3.10.0-1160.el7.x86_64/include/linux/version.h ``` 此脚本解决了特定版本下的兼容性问题[^2]。 #### 5. 跨平台文件传输解决方案-Xftp 为了方便Windows用户访问远程Linux主机上的数据,Xshell套件中的组件之一Xftp提供了一种简便的方式来进行安全的数据交换,它支持多种协议并具备图形化界面便于操作[^4]. 综上所述,Linux作为当前主流的服务端操作系统拥有丰富的社区支持和技术积累,无论是个人还是团队都可以从中受益匪浅.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值