操作系统
文章平均质量分 53
AllenSun-1990
上海先楫半导体资深FAE工程师,不定期更新HPMicro高性能MCU应用案例。
展开
-
Linux:应用程序访问设备节点权限
Linux系统应用程序访问设备节点权限原创 2022-09-19 10:42:55 · 1340 阅读 · 0 评论 -
Linux: IO中断驱动开发教程
本文章详细介绍了,在Linux内核开发IO中断驱动的流程。主要分为四部分:配置设备树DTS、驱动模块编写、配置Linux内核、应用程序测试。原创 2022-08-10 10:35:43 · 1222 阅读 · 0 评论 -
嵌入式Real-time Linux开发
本文详细讲解了开发嵌入式Real-time Linux的过程。原创 2022-08-01 13:40:53 · 500 阅读 · 0 评论 -
Ubuntu虚拟机通过网线链接
Ubuntu虚拟机通过网线链接原创 2022-07-12 19:33:01 · 1752 阅读 · 0 评论 -
开发板:MYD-YA157C解决无法访问外网
开发板:MYD-YA157C解决无法访问外网原创 2022-04-25 21:25:12 · 1424 阅读 · 0 评论 -
popen函数和system函数详解
1、popen函数我们先用man指令查一下popen函数:函数说明:(1)popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令。(2)参数type可使用“r”代表读取,“w”代表写入。依照此type值,popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。(3)此外,所有使用文件指针(FILE*)操作的函数也都可以使用,除了转载 2021-06-26 09:15:04 · 1010 阅读 · 0 评论 -
Android service crash导致调用接口出问题
public hidl_death_recipient void serviceDied(uint64_t cookie, const wp<IBase>& who); linkToDeath(this, /*cookie*/ 0);原创 2020-12-17 18:20:45 · 378 阅读 · 0 评论 -
Linux下内存查看命令
free ps top原创 2019-12-28 18:07:20 · 122 阅读 · 0 评论 -
嵌入式系统之:存储
eMMC:相当于一个控制IC+NAND FlasheMMC里的数据,掉电以后不会丢失。DDR:DDR RAM(Double-Date-Rate RAM),是RAM的一种,就是我们常说的内存。用来存储程序运行时的数据,掉电后会丢失。DDR RAM也叫做DDR SDRAM 它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了。文件系统:原始的文件系统数据存储在eMMC中。操作系统启动...原创 2019-11-25 08:49:44 · 813 阅读 · 0 评论 -
U盘中文件复制到ARM开发板
将U盘中的hello文件复制到ARM开发板中(绝大多数操作系统是linux的开发板都适用)。将U盘插到开发板上,会打印出一段信息:sda: sda1sd 1:0:0:0: Attached scsi generic sg0 type 0sd 1:0:0:0: [sda] Attached SCSI removable disk查看/dev下会多出来sda和sda1,这就是你的U盘的设...转载 2019-09-21 21:58:15 · 1101 阅读 · 0 评论 -
操作系统进程和线程概念总结
进程和线程都可以处理任务,不同之处在于:操作系统的每个进程都运行在一个独立的内存空间之中。每个进程有自己的进程标识符,英文叫做PID。操作系统对进程进行了隔离。使得进程之间通信变得困难。为什么要这样做呢?因为进程往往是独立的应用。进程之间基本没有交集。例如,聊天软件和视频软件,都是独立的进程。网络上的数据传到本地,就会直接分配给不同的进程。避免了不同任务之间的相互干扰。操作系统的进程,可以...原创 2019-03-20 10:26:45 · 505 阅读 · 1 评论 -
export 在shell脚本中设置环境变量失效
shell脚本中设定的路径和环境变量只对改shell和其子shell有效。 对其父shell和其它shell无效。解决方法:source filename.sh就OK了。source 使shell脚本里的设置对其它shell也有效。...转载 2018-10-10 13:54:17 · 3616 阅读 · 0 评论 -
zynq-7000 zc706 uboot和内核及设备树编译
smdk6410.h文件中/* Boot configuration (define only one of next) *///#define CONFIG_BOOT_NOR#define CONFIG_BOOT_NAND //配置成从nand启动uboot//#define CONFIG_BOOT_MOVINAND //配置成从SD卡启动uboot转载 2017-08-30 17:02:19 · 2029 阅读 · 0 评论 -
U-Boot启动过程完全分析
U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能Ø 硬件设备初始化Ø 加载U-Boot第二阶段代码到RAM空间Ø 设置好栈Ø 跳转到第二阶段代码入口 (2)第二阶段的功能Ø 初始化本阶段使用的硬件设备Ø 检测系统内存映射Ø 将内核从Flash读取到RAM中转载 2017-08-30 18:58:09 · 325 阅读 · 0 评论 -
FreeRTOS中打开关闭任务切换
本文介绍FreeRTOS中解决多任务之间互相影响的两种方法。1 基本临界区基本临界区是指宏 taskENTER_CRITICAL()与taskEXIT_CRITICAL()之间的代码区间,下面是一段范例代码。Critical Sections 也被称作Critical Regions。/* 为了保证对PORTA寄存器的访问不被中断,将访问操作放入临界区。进入临界区 */原创 2017-08-10 18:02:08 · 5157 阅读 · 0 评论 -
FreeRTOS软件定时器xTimerCreate
timers.h TimerHandle_t xTimerCreate ( const char * const pcTimerName, const TickType_t xTimerPeriod, const UBaseType_t uxAutoReload,翻译 2016-12-29 11:15:56 · 21491 阅读 · 0 评论 -
为何选择 Zephyr?
Zephyr 项目于 2 月宣布时,Linux 社区的许多成员似乎都感到不解。尽管由 Linux 基金会托管,但 Zephyr 是一款完全独立的操作系统,并未采用 Linux 代码。与多个其他开源操作系统项目(包括面向许多 ARM SoC 的 Linux)一样,该操作系统也面向小型硬件设备 —— 从 Arduino 到 ARM 系统芯片 (SoC)。在于圣迭戈举办的 016 年嵌入式 Linux转载 2017-04-12 13:45:00 · 1680 阅读 · 0 评论 -
Shell中反引号(`)与$()用法的区别
今天有人提问: echo `echo \\\\\\\w` echo $(echo \\\\\\\w) 为什么输出的不一样? 这就引申出了另一个问题:反引号与$()有没有区别?这是一个非常有意思的问题,但要解释这个问题确比较困难,我来换一个简单一点的例子,通俗的解释一下。比如我们有一个shell脚本名为test.sh有一下两行转载 2017-05-04 09:22:24 · 430 阅读 · 0 评论 -
shell脚本中使用tr命令实现对字符串删除、替换和赋值
#! /bin/bashTIME="2017.04.28"echo ${TIME}echo ${TIME} | tr -d "."_TIME=`echo $TIME | tr -d "."`echo ${_TIME}_TIME=`tr -d '.' echo ${_TIME}原创 2017-05-02 08:43:02 · 1958 阅读 · 0 评论 -
驱动程序直接编译进内核
hello程序直接编译进内核:第一;先将hello.c拷贝到在内核源代码中drivers/char/,vi /drivers/char/Kconfig添加 config HELLO_DRIVERbool(tristate) "my hello driver"。然后回到源代码目录下make menuconfig,在文本菜单Device Drivers——>character转载 2017-05-13 10:07:05 · 405 阅读 · 0 评论 -
基于结构体数组实现静态内存池管理
静态内存池管理要求: 32字节的内存块数量100块64字节的内存块数量100块256字节的内存块数量50块1024字节的内存块数量10块4096字节的内存块数量3块实现要求(给出函数原型,请大家实现函数体):内存池初始化函数:int initMem(void),返回0成功,其他值失败内存块申请函数:void *getMem(unsigned i原创 2016-11-13 17:26:52 · 1123 阅读 · 0 评论 -
Linux线程创建
#include #include #include #include int * thread(void *arg){while(1){printf("It is the thread!\n");sleep(1);} return NULL;}int main(){pthread_t id;prin原创 2017-06-15 20:39:26 · 281 阅读 · 0 评论 -
数据段、代码段、堆栈段、BSS段的区别
5个数据段 进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途 不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收的。对任何一个普通进程来讲,它都会涉及到5种不同的数据段。Linux进程的五个段下面我们来简单归纳一下进程对应的内存空间中所包含的转载 2017-06-13 17:22:15 · 393 阅读 · 0 评论 -
bootloader
bootloader最终目的:启动内核BootLoader就是在操作系统运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备,从而将系统的 软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备在嵌入式系统中,通常没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由BootLoader来完成。 一个嵌入式系统从软件角度来看分为三个层次:1. 引转载 2017-06-13 17:26:08 · 468 阅读 · 0 评论 -
Linux线程编程
线程是计算机中独立运行的最小单位,运行时占用很少的系统资源。可以把线程看成是操作系统分配CPU时间的基本单元。一个进程可以拥有一个至多个线程。它线程在进程内部共享地址空间、打开的文件描述符等资源。同时线程也有其私有的数据信息,包括:线程号、寄存器(程序计数器和堆栈指针)、堆栈、信号掩码、优先级、线程私有存储空间。为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什转载 2017-06-15 09:48:14 · 695 阅读 · 0 评论 -
Linux 进程与线程一(创建-关闭线程)
进程是一个实体。每一个进程都有他自己的内存地址段(heap,stack等等)进程是执行中的程序。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体。进程是操作系统中最基本、重要的概念。线程,又是被称为轻量级进程(Lightweight Process LWP),是程序执行的最小单元。每一个程序都至少有一个线程,若程序只有一个线程,那么就是程序本身。单线程的进程转载 2017-06-15 09:59:28 · 377 阅读 · 0 评论 -
Linux进程创建fork()函数
在利用linux的fork()函数创建进程时,新建的进程会继承父进程的代码段、数据段和堆栈段。不同的子进程和父进程fork()返回的值不同。利用fork产生进程时,由于迭代的关系会产生多个进程。因此需要加条件进行限制。#include #include int main() { pid_t p1 = 0; pid_t p2 = 0;原创 2017-06-15 16:09:55 · 412 阅读 · 0 评论 -
基于C语言的内存池的设计与实现
介绍: 设计内存池的目标是为了保证服务器长时间高效的运行,通过对申请空间小而申请频繁的对象进行有效管理,减少内存碎片的产生,合理分配管理用户内存,从而减少系统中出现有效空间足够,而无法分配大块连续内存的情况。目标: 此次设计内存池的基本目标,需要满足线程安全性(多线程),适量的内存泄露越界检查,运行效率不太低于malloc/free方式,实现对4-128字节范围转载 2016-10-08 19:27:55 · 2195 阅读 · 0 评论