- 博客(174)
- 资源 (17)
- 收藏
- 关注
原创 6.0 内核驱动-字符型驱动
相同:都要进行硬件实现层的设计(硬件裸机驱动)不同: 1:linux操作系统中加了众多接口,从系统API到硬件实现层调用过程中的系统框架2:同步,互斥,POLL,并发, 自旋锁,信号量 ,等待队列 standby,;linux机制同样要体现在内核驱动中3:驱动要服从linux内核管理:设备树,电源管理的全局构架4:不同CPU或不同linux版本的移植...
2022-02-12 21:22:52
468
原创 uboot移植
1 信息各版本下载:https://ftp.denx.de/pub/u-boot/版本:u-boot-2014.012U-boot 作用设置系统时钟,关闭中断,设置svc32模式,初始化硬件进行代码重定义(uboot自身)给内核进行参数的配置做内核代码的重定义做内核启动Uboot的具体结构1:分析主目录makefile 或者 直接编译看效果编译链接过程:配置-使用默认相近板卡配置的公版 make smdk2410_config编译2: 进行Uboot的移植和调式..
2022-02-12 20:56:26
791
原创 5.1 linux内存管理-分页管理和页异常处理
1:信息linux - 0.11memory.c2: 代码//显示内存已用完出错信息,并退出static inline volatile void oom(void){ printk("out of memory\n\r"); do_exit(SIGSEGV); //退出码SIGSEGV(11)相同值的出错码含义是:资源暂时不可用}//刷新页变换缓冲(一般位于cache中的TLB)宏函数//为了提高地址的转换效率,cpu将最近使用的页表数据存放在芯片中高速缓冲中。在修改过页表信息后,就
2022-02-09 21:53:35
866
原创 5.0 linux内存管理-原理
1. 信息linux 0.112. 目的了解内存的管理机制了解虚拟内存和物理内存的映射方式了解操作系统内存和磁盘的交互(分页机制->缺页重读机制,用时拷贝机制)应用程序如何搞笑使用内存和高级程序的设计方式3. linux系统中内存映射图linux 0.11 默认支持16M虚拟盘:用来模拟磁盘4. 专有名词逻辑地址:程序员看到的地址,linux操作系统分配给每一个进程的独立地址(例如0.11中每个进程认为的自己的空间 64M的地址)线性地址:总线地址ARM CPU采用分段机
2022-01-30 18:29:52
1730
1
原创 4.6 linux文件系统-文件系统操作和管理
1:信息linux 0.11下面文件属于文件系统的高层操作和管理部分open.c :文件访问操作系统调用exex.c :程序加载和执行函数stat.c, :取得一个文件的状态信息fcntl.c :实现文件访问控制管理ioctl.c :控制设备的访问操作2 open.c本文中实现了许多与文件操作相关的系统调用。主要是文件的创建,打开和关闭,文件宿主和属性的修改,文件访问权限的修改,文件操作时间的修改和系统文件root的变动2.1 sys_open 打开或创建参数:filename -
2022-01-27 17:21:44
1546
原创 4.6 linux文件系统-虚拟文件系统VFS
1:信息版本:Linux-0.112:VFS和FS3:普通文件file_dev.c 主要操作数据:逻辑块号结构体struct file { unsigned short f_mode; //文件的类型和属性 unsigned short f_flags;//读写,执行 unsigned short f_count;//引用次数 struct m_inode * f_inode;//对应的inode节点 off_t f_pos;//本文件当前读写位置,lseek可以修改的};
2022-01-18 23:18:54
811
原创 单片机的换行字符\r\n和\n的相关问题
1:问题在使用单片机在串口助手上打印的时候,需要使用\r\n才能正常的换行. 而在linux在打印信息只需要一个\n2:原因这是由于系统对换行符的不同和导致的通常使用单片机打印信息是输入到windox下的串口助手上,而window下的换行是\r\n而unix和linux下的换行符\n3:符号含义\r是回车,carriage return的意思,作用是返回到当前行的最前方。\n是换行,line feed的意思,作用是跳到下一行的当前位置。\r\n是回车+换行,很容易理解,它的作用是跳到下一行
2022-01-13 20:45:00
1443
原创 4.5 linux文件系统-文件目录的操作
1:信息linux - 0.11linux/fs/namei.c2:目的:文件系统目录的建立,删除,打开,节点建立,删除文件系统的文件操作,打开,权限,属主等了解文件系统的命令操作 chmod chown mknodC语言中内存区域的检索和管理,高效代码的xiefa3: 相关函数3.1 权限检测函数permissionstruct m_inode { unsigned short i_mode; 16位数 文件类型 当前用户权限(3位) 用户组权限(3位) 其他用户权限(3位)
2022-01-09 23:10:44
715
原创 4.4 Linux文件系统-挂载卸载和超级块
1:基本信息代码:linux-0.11super.c : 含有处理超级快的代码超级块是设备的映射,超级块的操作关系到设备文件系统操作下面会解析:对超级块进行操作(创建,读取,释放) get_super, put_super, read_super文件系统加载/卸载: mount/umount sys_mount, sys_umount根文件系统的加载(/)mount_root2:相关宏和数组/* * linux/fs/super.c * * (C) 1991 Lin
2022-01-06 23:53:10
1226
原创 4.2 linux文件系统-高速缓冲区
1:2:linux文件系统的几部分1:有关linux中高速缓冲区的管理部分。分页机制 buff.c2:文件系统的底层通用函数。(对于硬盘的读写,分配,释放,对于目录的节点管理,内存和磁盘的映射)3:对文件数据进行读写操作的模块(VFS 虚拟文件系统,硬件驱动和文件系统的关系, pipe,块设备的读取)4:文件系统与其他程序的接口实现(fopen 关闭,创建等文件的调用方式)文件系统的基本概念以磁盘为例,磁盘中有目录的映射,把磁盘分成盘片,每一个盘片 都有一个文件系统的子系统(章节目录)引
2021-12-31 11:02:48
917
原创 4.1 内核文件系统-busybox
1:信息busybox版本:busybox-1.7.02:关于busyboxbusybox是一个集成了一百多个最常用linux命令和工具的软件,他甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却只有区区1M左右的大小.我们平时用的那些linux命令就好比是分立式的电子元件,而busybox就好比是一个集成电路,把常用的工具和命令集成压缩在一个可执行文件里3:文件系统开始运行busybox上一章说明从内核如何到busybox, 通过调用linuxrc : 4.0 内核文
2021-12-28 13:20:02
600
原创 4.0 内核文件系统-kernel部分
1:信息内核版本: Linux 0.112:文件系统的出现位置板卡上电后先由UBOOT启动初始化办卡,将Linux移到内存中运行由linux内核自行做初始化操作,挂载了第一个应用程序(根文件系统 /linuxrc)根文件系统会提供磁盘管理服务,glic设备节点,配置文件,应用程序 shell命令(Android就是linux多了个文件系统)文件系统的重要部分:1:标准库:glibc OpenGl media framwork2:配置文件:/etc/init.d/rcS (开机运行的软件,
2021-12-28 13:19:27
540
原创 3.0 内核信号
1:信息代码 Linux 0.012: 内核中信号#define SIGHUP 1#define SIGINT 2#define SIGQUIT 3#define SIGILL 4#define SIGTRAP 5#define SIGABRT 6#define SIGIOT 6#define SIGUNUSED 7#define SIGFPE 8#define SIGKILL 9#define SIGUSR1 10#define SIGS
2021-12-24 23:24:31
403
原创 2.1 高版本内核初始化
1: 信息和文件代码版本:Linux-3.4.2文件:linux-3.4.2\arch\arm\kernel\head-common.Slinux-3.4.2/arc/arm/kernel/vimlinux.lds.S : 链接文件linux-3.4.2\arch\arm\include\asm\mach\arch.hlinux-3.4.2\arch\arm\mach-s3c24xx\mach-smdk2440.c2:板级信息传递目的:板级信息如何传递到linux内核中去2.1:段信息内容
2021-12-24 11:39:07
594
原创 扩展内联汇编 __asm__
1:汇编的结构__asm__ __volatile__(assembly template \\汇编指令行 : output operand list \\输出操作数列表 : input operand list \\输入操作数列表 : clobber list \\破坏列表内联汇编在逻辑上总是由四部分组成:关键字 asm() 或 asm()。修饰符 volatile 或 volatile:关键字 asm 或 asm 用于说明随后的字符串是内
2021-12-23 18:38:25
802
原创 2.0 Linux内核的引导与启动
1:Linux的引导主要文件位置 linux/boot/1.1从硬盘读出cpu上电后会进入boot模式,其中BIOS (x86 是0xFFFF0 存储的总线地址)把bootsect从固定的地址拿到内存中的某个固定地址(0x90000),并且进行了一些硬件初始化和参数设置bootsect.s 磁盘引导块程序,在磁盘第一个扇区中的程序作用:首先将后续的setup.s 代码加载到紧接着bootsect.s的地方在显示屏上显示loading system 再将system(操作系统)模块加载到0x100
2021-12-23 17:52:18
1022
原创 关于inline和_syscall0和汇编函数带下划线
1:描述查看内核代码时,会有下面的声明static inline _syscall0(int,fork)2: inlineinline是一个内联函数,可以让gcc把函数代码集成到调用它的代码中。这会提高代码执行的速度3:_syscall0_syscall0在unistd.h中的内嵌宏代码,它以汇编的形式调用Linux的系统调用的中断 int 80,并在eax寄存器指定系统调用的功能号#ifdef __LIBRARY__#define __NR_setup 0 /* used only by
2021-12-23 17:47:39
1125
原创 1.2 内核进程销毁
1:代码版本Linux-0.11exit.c2:销毁流程销毁函数也是系统调用die()-> do_exit()具体过程:首先会释放进程的代码段和数据段占用的内存进行释放关闭进程打开的文件,对当前的目录和i节点进行同步如果当前要销毁的进程有子进程,就让1号进程作为子进程的父进程 (init进程)如果当前进程是一个会话头进程,则会终止会话中的所有进程改变当前进程的运行状态,变成TASK_ZOMBIE僵死状态,并向父进程发送信号SIGCHLD父进程再运行子进程的时候会运行wait
2021-12-22 14:43:02
377
原创 1.1-内核的进程调度和进程切换
1:代码环境linux 0.112: 进程调度辅助函数show_task()void show_task(int nr,struct task_struct * p)//nr为pid,代表第几个进程{ int i,j = 4096-sizeof(struct task_struct); //找到栈堆的大小 printk("%d: pid=%d, state=%d, ",nr,p->pid,p->state);//打印pid 和状态 i=0; while (i<j &a
2021-12-21 17:06:57
359
原创 1.0-内核进程初始化与创建
1:相关信息代码:linux 0.112: 进程结构体每个进程在内核中都对应着一个结构体struct task_struct,用来表示进程的状态和相关信息struct task_struct {/* these are hardcoded - don't touch */ long state; /*进程的状态 -1 unrunnable(为运行), 0 runnable(运行), >0 stopped(停止) */ long counter; //进程的时间片计数,当为0时就要进行调度
2021-12-21 15:40:00
554
原创 ST-link v2使用SW模式烧录代码
1:目的在某些开发板上没有引出ST-link完全适配的的20帧排线,可以通过连接SW模式,使用4根线来完成烧录操作2:ST-link的引脚含义3:ST-link v2 对应引脚编号的位置4:连接排线使用SW模式,要用VCC, SWCLK, SWOO, GND所以使用 1, 7, 9, 12这几个脚就可以。注意:1引脚默认是不供电的,名为TVCC,实际是Target VCC,就是说这个脚是接到目标芯片的IO轨电源上,用来检测IO顺从电压以确保信号的兼容性。因为debug工具不知道你的单板上I
2021-11-26 10:56:27
6248
原创 STM32 外部中断EXTI
外部中断线有20条,其中16条用于● EXTI线0 - 15连接 GPIOx 0 - 16 (EXTI0 对应GPIOx0, 每一组GPIO的0号引脚)● EXTI线16连接到PVD输出● EXTI线17连接到RTC闹钟事件● EXTI线18连接到USB唤醒事件● EXTI线19连接到以太网唤醒事件(只适用于互联型产品)首先配置中断要分钟两部分1:内置中的中断控制器的配置 NVIC, 相当于总开关2:每个外设单独的中断控制,例如GPIO的中断控制是由EXTI来执行的, 相当于分开关已GP.
2021-10-29 14:28:19
685
原创 SetSysClockTo72配置系统时钟函数
static void SetSysClockTo72(void){ __IO uint32_t StartUpCounter = 0, HSEStatus = 0; /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ /* 使能 HSE */ RCC->CR |= ((uint32_t)RCC_CR_HSEON); /*等待SHE就绪并做超时处理*/
2021-10-28 17:14:14
490
原创 source insight快速添加代码文件头注释和函数注释
1:目的通过快捷键来为代码快速添加头注释和函数注释2:方法1.打开base工程2. 在utils.em下添加或修改下面的函数2.1代码头部注释/*获取文件名称*/macro GetFileName(pathName){ nlength = strlen(pathName) i = nlength - 1 name = "" while (i + 1) { ch = pathName[i] if ("\\" == "@ch@") break i = i - 1 }
2021-09-26 14:01:38
2682
原创 在代码中获取linux下的IP地址
1:目的由于linux下的IP是可以修改的,代码中使用IP时也要跟着修改,才能使用。所以在代码中先获取设备的IP地址,再进行网络联接,就可以避免这种事的发生。2:结构体2.1 struct sockaddr_in包含协议,端口, IP地址#include<netinet/in.h>或#include <arpa/inet.h>struct sockaddr_in {short int sin_family; /* Address famil
2021-09-16 09:11:18
232
原创 linux下打开串口设备并收发数据
1:目的为了打开 /dev/下的串口设备,并进行收发数据的操作2:用到内容文件操作定时器timerfd监听函数 select3:示例/************************************************************************* > File Name: series.c > Author: kayshi > Mail: kayshi2019@qq.com > Created Tim
2021-09-03 11:18:02
1792
原创 实现线程上使用的互斥锁
1:目的不使用库中的互斥锁函数,通过实现互斥锁函数,来实现线程间的互斥操作2:代码/******************************************************************************* * @file main.c * @verison v1.0.0 * @copyright COPYRIGHT © 2020 CSG * @author ShiYanKai
2021-08-26 15:48:39
74
原创 C语言中哈希表的使用(二)
1:利用开源GitHub有针对hash实现的开源代码,如果不想自己一步步的实现hash的各种操作,可以直接包含开源代码中的头文件uthash.h(内部通过各种宏来实现), 利用里面的接口,来实现hash操作。可以节约大量的时间,并减少自己的代码量。有些时候需要自己进行简易的封装。2:结构体typedef struct user_t { int id; int cookie; UT_hash_handle hh; }user_t;结构体要自己定义一下id 表示 key
2021-08-19 16:33:08
429
原创 C语言中哈希表的使用(一)
1:哈希表哈希表是链表的一个变种。可以这么理解,一个数组放了n个指针,每个指针指向一个链表。存储的数据以key:value的形式保存。 通过key的经过一些规则可以计算出存在数组的那个位置。再遍历这个位置的链表来value的值。2:示例/******************************************************************************* * @file hash.c * @verison v1.0.0
2021-08-11 16:29:41
1597
原创 C库中的排序函数qsort
1:函数void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))作用:安装指定的方式进行排序2:参数base – 指向要排序的数组的第一个元素的指针。nitems – 由 base 指向的数组中元素的个数。size --数组中每个元素的大小,以字节为单位。compar – 用来比较两个元素的函数。通过这个函数来决定你想么排序如果compar返回值小于0(&l
2021-07-28 15:17:31
412
原创 将BCD码转化成10进制数
1:目的将BCD码转化成10进制数,并按照低位到高位的形式组合在一起。例如0x23和0x45 转化成 十进制45232:实现/******************************************************************************* * @file pow.c * @verison v1.0.0 * @copyright COPYRIGHT © 2020 CSG * @autho
2021-07-03 17:12:32
5461
原创 Select函数的应用
Select的函数格式(我所说的是Unix系统下的伯克利socket编程,和windows下的有区别,一会儿说明): int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);两个配套的结构体结构体:1:struct fd_setstruct fd_set可以理解为一个集合,这个集合中存放的是文件描述符(filedescriptor),即文件句柄,这可以是我们所
2021-07-02 16:08:25
130
原创 linux下对库文件和执行文件的命令操作
1: 查看执行文件的依赖 lddyankaishi@zx-dev:~/test/topo_file_switch$ ldd a.out linux-vdso.so.1 (0x00007ffc471bd000) libcjson.so.1 => /usr/local/lib/libcjson.so.1 (0x00007f4691037000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4690e45000) /lib6
2021-06-28 14:29:24
98
原创 两位十进制数数字不变转化成16进制
1:目的将十进制数例如 23 转化成16进制数 0x232:方式unsigned char hex_to_bcd(unsigned char hex){ if (hex > 99) return 0; return ((hex / 10) << 4) +hex % 10;}
2021-06-15 15:56:30
481
1
原创 C语言中两个相同的结构体类型的变量可以进行赋值操作
1:目的以前使用结构体,经常是对结构体中各个成员进行单独赋值。现在也可以利用相同的结构体类型的变量进行赋值2:示例/******************************************************************************* * @file main.c * @verison v1.0.0 * @copyright COPYRIGHT © 2020 CSG * @author
2021-06-09 11:26:26
4015
2
cjson功能代码的相关实现
2021-03-30
MQTT-old.zip
2020-08-13
GAgent_00ESP826_04020024_17062808_combine.bin
2020-08-05
ATK-ESP8266连接阿里云.zip
2020-08-04
MQTT_ESP-12S_DIO_32Mbit_2.0.0_2020311.bin
2020-08-03
c-sdk-v3.2.0-5420c835984400a141d7529b93c5c8a49b108b06.zip
2020-08-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人