- 博客(20)
- 收藏
- 关注
原创 字符设备驱动程序的三种写法
b.所有的寄存器操作着杂糅在驱动程序里,要是换另一个单板,又要重新编写整个.c文件,改进为为将具体的硬件操作和驱动程序分离开来,换另一个单板,只需提供对应的board.c文件。-c.对于每一个led硬件资源,有那么多引脚,要再抽象出一个led_resource结构体。以后要更改引脚就改资源文件board_A_led就可以了。但是对于那么多种类的硬件资源(如gpio, uart, dma, .....),用这类方法要编写一堆的资源文件,太过于麻烦。
2023-11-26 18:31:55 147 1
原创 TTY体系中设备节点的差别
dev/tty:程序或应用自己的终端(不想去指定具体是串口还是虚拟终端,可以用tty代替)/dev/ttySAC0:某个开发板的串口。/dev/tty0:前台程序的终端。/dev/ttyS0:PC串口。/dev/tty1:虚拟终端1。/dev/tty2:虚拟终端2。/dev/ttyn:虚拟终端n。
2023-11-04 17:34:03 123 1
原创 字符的编码方式
Unicode字符集 (统一码用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,字符和数值是一一对应的关系,兼容ASCII。UTF16 LE,UTF16BE用2个字节表示ASCII,和其他码。ANSI字符集 (Windows字符集被称作“ANSI字符集” ,兼容ASCII,可以表示汉字,通过最高位可区分ASCII码和非ASCII码,为0是ASCII码,汉字由2个字节表示。所以在大陆的人把一个用GB2312字符集编码的文档发给台湾人,台湾使用BIG5编码,会出现乱码。
2023-10-01 15:21:46 97
原创 Linux内核编程
aux、axjf字母含义:a--显示1个终端所有进程;j--显示进程归属的进程组、会话、父进程ID;诞生--shell中执行应用程序、父进程fork生成子进程、shell中使用管道连接的应用程序;-终端:开发板物理终端--串口、LCD;创建守护进程--fork、setsid、chrdir、umask、close;-后台进程组:不占用终端;-使用场景:关注进程本身--ps aux;-托孤进程:父进程先结束,linux会把子进程托孤给1号进程init。-进程的正常退出步骤:子进程exit、父进程wait;
2023-08-26 21:15:18 168
原创 linux文件系统
在进行数据的读写的过程中,先不把数据直接写入或者读入设备中,而是写或者读入内存空间,当满足一定条件时候,将该空间的文件写入文件或设备中。这样可以减少操作系统调用驱动程序或文件的次数,提高读写的速度,和代码的效率。调用exit()进程结束时会刷新缓冲区,return会自动调用exit(),注意_exit()不会刷新缓冲区。-进程文件系统procfs,挂载在/proc,存放进程相关信息相当于windows的任务管理器。-不带缓冲机制,系统IO可以操作普通文件与驱动文件。当缓冲区满了也会被刷新出来。
2023-08-26 21:13:35 47
原创 Linux与HelloWorld
3. Hello.s(汇编文件)àHello.o(可重定位文件)(在经过汇编之后,生成的文件是可重定位文件,然后可重定位文件经过链接器的动态静态链接,最终生成可执行文件)6.在do_execve()中进一步调用load_elf_binary()(在文件系统中加载Hello应用程序到内存)2.Hello.i(预处理文件)àHello.s(汇编文件)(将预处理文件通过语法词法分析变成汇编文件)4. Hello.o(多个可重定位文件,不止Hello.o一个)àHello(可执行文件)
2023-08-19 23:16:32 51
原创 交叉编译相关
有的计算机平台没有编译工具或者操作系统,就需要在另一个平台生成编译好的可执行文件上传到这个平台。或者是计算机性能低要利用性能高的计算机来编译较为复杂的文件,将编译好的可执行文件直接上传到这个平台运行。前提是编译的工具链要和运行的平台对应。例如在windows平台下用arm-linux-gnu-gcc编译程序再上传到arm平台,利用windows的性能来辅助arm平台。Linux none 表示不支持linux操作系统。
2023-08-19 23:08:07 34
原创 Ubuntu deb包
以下是构建deb包的shell脚本(输入sudo ./build_deb.sh helloworld helloworld.deb)dpkg -b $package_dir $package_name #将文件打包为.deb文件。在运行此脚本之前要建立一个安装软件包的目录helloworld/usr/bin。将xxx.sh放在bin目录下,软件安装完成后这个xxx.sh文件会自动。存放在根目录下的/usr/bin,xxx.sh就成了外部命令。输入完成后就创建了helloworld.deb这个文件。
2023-08-19 23:05:36 179
原创 Linux 环境变量
修改完以上两个文件后(例如在文件末加上abc=123之类的测试),要开另一个窗口测试才会生效。用第一类方法不能将值正确赋给变量(有创建子shell,结束回到父shell会释放)第二类可以,由于启动方式的不同造成的(在当前shell中执行,变量能够保存在当前)若已经登入(进入终端)重新开一个终端,1和4不会执行。export abc 再创建子进程就能访问到了。但是在另一个终端(进程)中还是访问不到。重新开一个终端,5和6会重新执行。再用echo访问就访问不到了。4是当前用户登入才执行。用户登入才执行1和4。
2023-08-19 23:01:39 39
转载 shell中#*,##*,#*,##*,% *,%% *的含义及用法
{file%.*}:删掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file。
2023-08-18 14:22:57 1477 1
原创 Shell语法(cat <<EOF)
EOF(end of file),表示自定义终止符,EOF是不固定的,可以随意设置别名,在linux按ctrl+d 就代表EOF。ctrl+d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。注:在shell中,ctrl+d表示退出当前shell.ctrl+c是强制中断程序的执行,进程已经终止。ctrl+z的是将任务中止(暂停的意思),但是此任务并没有结束,他仍然在进程中他只是维持挂起的状态,用户可以使用fg/bg操作继续前台或后台的任务,fg命令重新启动前台被中断的任务,bg命令把被中断的任务放在
2023-08-18 13:59:58 727 1
原创 Shell基本语法
变量名=value(值不能带空格)变量名=’value’(不能引用变量)var=”123”echo $var1输出${var1}456将以上var1=’’改为var1=””输出123456变量名=”value”(都能)
2023-08-17 16:24:57 57 1
原创 Vi工具的使用
Shift+g 跳转最后一行gg 跳转第一行/word 查找为word的关键字n/N 查找下一个/上一个关键字w 另存为r 读取另一文件! 暂时回到终端并执行命令按Enter回到vi工具
2023-08-17 16:11:27 51 1
原创 Linux用户与用户组
第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。第 4-6 位确定属组(所有者的同组用户,不包括自己)拥有该文件的权限。第 7-9 位确定其他用户拥有该文件的权限。
2023-08-17 15:57:07 125 1
原创 Linux文件类型
FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。数据格式的文件(data);可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。即串行端口的接口设备,例如键盘、鼠标等等。就是目录, 能用 # cd 命令进入的。],例如 [drwxrwxrwx]],例如 [lrwxrwxrwx]
2023-08-17 15:48:50 87 1
原创 Linux根目录下文件夹功能说明
proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。当系统重启时,这个目录下的文件应该被删掉或清除。用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
2023-08-17 15:44:16 234
原创 man手册
在 man-pages-posix 文件夹下,有 POSIX 的 man 手册。Ubuntu 下需要一个个单独安装,或用通配符一次安装。
2023-08-16 20:23:54 152
原创 Ubuntu下的常用命令
cp /mnt/hgfs/share/zqx . 一般要操作共享文件夹的文件要先拷贝到另一个文件夹中(.代表当前文件夹,即将zqx文件复制到当前文件夹)ps (-aux|grep) init 查看进程(aux显示全部内容,grep筛选init的进程)cd .. 返回上层文件夹(”..“代表上层文件夹’.‘代表当前文件夹)mv a.c b.c 将a.c重命名为b.c。cp a.c b.c 拷贝a.c为b.c。
2023-05-01 15:44:46 100
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人