linux 驱动编程笔记

micom中:

md.b 0x30000000 查看ram起始地址0x30000000地址中的数据
mm.b 0x30000000 修改数据
nm.b 0x30000000 地址自增修改数据


sudo minicom -con  进入界面
printfenv 打印环境变量
setenv  ...     '...'      eg: setenv bootdelay '10' 设置上电延时为10s
saveenv   保存环境变量
nand erase.chip nand-flash

ipaddr 虚拟机的ip
serverip 板子的ip

ping 192.168.1.100
tftp 0x30008000 uImage  通过tfpt将写好的linux内核文件uImage(image:镜像)下载到板子的0x30008000中  

解压命令 sudo tar xvf 文件名
sudo vi /etc/exports 查看输出文件配置,更改里面的设置
sudo /etc/init.d/nfs-kernel-server restart

setenv bootargs `root=/dev/nfs nfsroot=192.168.1.100:/home/linux/nfs/rootfs ip=192.168.1.105 console=ttySAC0,115200 init=/linuxrc`

bootm 0x30008000   启动0x30008000中存的linux内核
sudo netstat -anp|less
sudo kill -9 ....   杀死对应的pid

rm .... -rf 删除

vi .bashrc
source .bashrc
arm-linux-gcc -v

sudo reboot 重启

代码写在linux的 /nfs/rootfs
gcc -oapp hello.c

arm-linux-gcc -oapp hello.c 
file app


ctags -R空格.
ctrl + 】 跳到光标对应函数的源码,主要用来查看源码
ctrl + t 返回

 cp ./config_mini2440_td35     ./.config  复制粘贴写好的配置文件到.config里
 vi .config   
make menu.config   make menuconfig    打开一个图形化配置界面,来配置驱动、环境、功能、架构
(按空格可以修改 *    ' 空格'    M)
make uImage   在~/s3c2440/linux-2.6.32.2下编译uImage镜像的内核
 cp arch/arm/boot/uImage ~/tftpboot/   将编译好的uImage复制到家目录下的tftpboot目录下
然后就可以在minicom(uboot)中进入内核 执行编译好的hello.c 生成的app文件


nfs多文件系统(n     file  system)
arm-linux-gcc -oapp hello.c (在~/nfs/rootfs下使用)
arm-linux-gcc -v 用来编译文件
ctags -R空格.   用来查看和追踪源码的函数

:set mouse=a  光标跟随鼠标
printk用于内核里输出 (print kernel(核心))

先在drivers/char/Kconfig中添加config FIRST_DRIVER  这样在配置菜单(make menuconfig)可以看见我们写的驱动,改一次菜单配置就要make uImage一次
在drivers/char/Makefile 添加目标文件first_driver.o  用来编译时候可以编译上我们写的驱动
make modules         modules(模块、组件的意思),编译驱动
最终在drivers/char/下生成了first_driver.ko 就是我们的驱动文件
make在~/s3c2440/linux-2.6.32.2/my_drivers下使用,复制好的Makefile在这里


cp drivers/char/first_driver.ko ~/nfs/rootfs 将写好编译好的驱动通过多文件系统复制到开发板,
在minicom中用 
insmod first_dirver.ko加载驱动程序   
rmmod first_driver  不加.ko删除驱动程序

cat /proc/devices  查看设备号    主设备号 子设备号
__两个_  eg:char __user *表示内核用户缓冲区

ls /dev/查看arm内核中的设备文件下有没有你的设备文件
rm /dev/first_device  删除设备文件
minicom中用mknod            makenode创建设备文件,[OPTIONS]不可填,设备名(NAME),主设备号(MAJOR),子设备号(MINOR)  
mknod ? 查看这个命令   mknod /dev/first_device c 200 0    first_device为我的设备名,200为主设备号 0为子设备号   表示应用程序以后就是以文件/dev/作为入口调用驱动程序的

要想控制灯的亮灭必须修改寄存器 1.以前的应用层的程序都是运行在用户空间,运行在用户空间的程序,CPU是处于USER模式。2.访问CPU的七种模式中,只有在SVC模式时才可以修改寄存器,现在的驱动程序运行在内核态,所以CPU一定运行在SVC模式


MMU (内存管理单元) 在cpu的内核,会将要访问的物理地址进行映射成一个新的地址,所以需要ioremap对要访问的物理地址映射后才能访问到
ioremap(物理地址,映射几个字节)              内存映射,对将要访问的物理地址进行内存映射


 

相关推荐

  1. linux 驱动编程笔记

    2024-04-25 14:26:03       12 阅读
  2. linux驱动-poll使用笔记

    2024-04-25 14:26:03       32 阅读
  3. Linux学习笔记9-Linux驱动【1】

    2024-04-25 14:26:03       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-25 14:26:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-25 14:26:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-25 14:26:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-25 14:26:03       18 阅读

热门阅读

  1. vue里面事件修饰符.prevent使用案例

    2024-04-25 14:26:03       13 阅读
  2. leveldb中THREAD_ANNOTATION_ATTRIBUTE__宏的作用

    2024-04-25 14:26:03       14 阅读
  3. 深入解读Dubbo:微服务RPC框架的佼佼者

    2024-04-25 14:26:03       18 阅读
  4. 基于Splinter演示如何使用Chrome WebDriver

    2024-04-25 14:26:03       17 阅读
  5. Debian常用命令

    2024-04-25 14:26:03       16 阅读
  6. 实时交互新篇章:WebSocket在Flutter中的应用与实践

    2024-04-25 14:26:03       15 阅读
  7. Android retrofit使用模板

    2024-04-25 14:26:03       40 阅读
  8. Qt相关开源项目总结

    2024-04-25 14:26:03       13 阅读
  9. QT5.12.12配置MSVC2017编译器环境

    2024-04-25 14:26:03       21 阅读