嵌入式
thomas_blog
路漫漫其修远兮
展开
-
sigrok源码编译
地址:https://sigrok.org/wiki/Main_Pagelibsigrokdecode安装sudo make install出现如下错误:python3.6 ./tools/install-decoders \ -i ./decoders -o /usr/local/share/libsigrokdecode/decoders/bin/bas...原创 2019-10-25 17:22:24 · 1821 阅读 · 0 评论 -
u-boot-1.1.4修改启动地址
下面的修改针对PPC8548 NOR Flash。跑Linux带文件系统修改文件u-boot-1.1.4\common\cmd_bootm.cdo_bootm_linux在没有加命令行参数启动的时候,此函数可以通过解析环境变量中的默认启动地址,来引导内核。环境变量所在文件include/configs/MPC8548PC.h也可以通过命令行指定内核启动地址和文件系统地址下面,将在代码中修...原创 2019-10-24 19:26:42 · 1995 阅读 · 0 评论 -
ARM与x86 CPU架构对比
CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构。它们的区别在于不同的CPU设计理念和方法。早期的CPU全部是CISC架构,它的设计目的是CISC要用最少的机器语言指令来完成所需的计算任务。RISC和CISC是设计制造微处理器的两种典型技术,虽然它们都是试图在体系结构、操作运行、软件硬件、编译时间和运行时间等诸多因素中做出某种平衡,以求达到高效的目的,但采用的方法不同转载 2017-06-23 14:39:49 · 1035 阅读 · 0 评论 -
内核开机logo
安装# sudo apt-getinstall netpbm制图# bmptoppm logo.bmp > logo.ppm# ppmquant 224 logo.ppm > logo224.ppm# pnmnoraw logo224.ppm > logo_clut224.ppm拷贝# cp logo_clut224.ppm kernel/drivers/video/logo内核配置Define转载 2017-06-12 11:34:49 · 493 阅读 · 0 评论 -
嵌入式安装telnet
busybox配置Defined at networking/Config.in:784Depends on: TELNET Location: -> Networking Utilities [*] telnetd (NEW) [*] Support standalone telnetd (not inetd only) (NEW)rcS# mkdir /dev原创 2017-06-12 13:15:06 · 989 阅读 · 0 评论 -
内核当前时间
do_gettimeofdaystruct timespec { __kernel_time_t tv_sec; /* seconds */ long tv_nsec; /* nanoseconds */};void do_gettimeofday(struct timeval *tv){ struct timespec now转载 2017-06-12 13:41:19 · 378 阅读 · 0 评论 -
内核申请内存
kmallocvoid *kmalloc(size_t size, gfp_t flags)物理地址是连续的。用于小块内存的申请__get_free_pagesunsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order){ struct page *page; /* * __get_free_pages转载 2017-06-12 15:17:45 · 967 阅读 · 0 评论 -
UART串口简介
通用异步收发传输器(Universal Asynchronous Receiver Transmitter)原理发送数据时,CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出 接收数据时,UART检测另一根电线上的信号,将串行收集放在缓冲区中,CPU即可读取UART获取这些数据 UART以全双工方式传输数据,最精简的连接方法只有3根线: TxD:发送数据 RxD:原创 2017-06-12 22:38:42 · 4717 阅读 · 0 评论 -
I2C总线
由PHILIPS公司开发的两线式串行总线特点 接口线少,控制方式简单,器件封装形式小,通信速率较高特征一条串行数据线SDA,一条串行时钟线SCL它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏串行的8 位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s连接到相同总线的转载 2016-05-25 23:54:23 · 1461 阅读 · 0 评论 -
boost交叉编译
运行bootstrap.sh# ./bootstrap.sh生成b2、bjam和project-config.jam文件修改project-config.jamusing gcc : arm : arm-hisiv100nptl-linux-g++ ; (注意空格)运行bjam# ./bjam编译# ./b2安装# ./b2 install转载 2017-06-21 10:49:32 · 2754 阅读 · 0 评论 -
libusb移植
下载 https://sourceforge.net/projects/libusb/编译# ./configure --build=i686-linux --host=arm-linux --prefix=`pwd`/install CC=arm-linux-gcc --disable-udev# make# make install转载 2017-06-21 17:48:36 · 731 阅读 · 0 评论 -
ubuntu安装交叉编译器
# sudo apt-get install gcc-arm-linux-gnueabi 官方下载 https://launchpad.NET/gcc-arm-embedded转载 2017-06-20 11:39:56 · 892 阅读 · 0 评论 -
netfilter
通俗的说,netfilter的架构就是在整个网络流程的若干位置放置了一些检测点(HOOK),而在每个检测点上登记了一些处理函数进行处理(如包过滤,NAT等,甚至可以是 用户自定义的功能)1. IP层的五个HOOK点 [1]:NF_IP_PRE_ROUTING:刚刚进入网络层的数据包通过此点(刚刚进行完版本号,校验和等检测), 目的地址转换在此点进行[2]:NF_IP_LOCAL_IN:经路由查找转载 2016-02-21 15:09:39 · 672 阅读 · 0 评论 -
OpenWrt增加软件包
SECTIONCATEGORYSUBMENUTITLEDESCRIPTIONURLMAINTAINERDEPENDSBuild/PrepareBuild/CompilePackage/$(PKG_NAME)/installevalcallBuildPackage转载 2017-04-11 11:31:29 · 4139 阅读 · 0 评论 -
等待队列 阻塞非阻塞
阻塞 设备驱动不阻塞,用户想获取设备资源只能不停的查询,这无谓的消耗CPU资源。而阻塞访问,不能获取资源的进程将进入休眠,它将CPU资源“礼让”给其他进程 唤醒进程的地方最大可能发生在中断里面,因为硬件资源获得的同时往往伴随着一个中断定义头wait_queue_head_t queue;初始化头#define init_waitqueue_head(q) 定义#define DECLARE_W原创 2017-06-01 17:24:05 · 571 阅读 · 0 评论 -
MMU简介
MMU(Memory Management Unit)内存管理单元 负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查。内存访问权限的检查可以保护每个进程所用的内存不会被其他进程所破坏地址变换 以前的程序非常小,可以全部装入内存中 32位CPU中,虚拟内存范围0~0xFFFFFFFF 没启动MMU时,CPU、cache、MMU、外设等所有部件都使用物理地址 虚拟地址空间和物理地转载 2017-06-05 22:39:41 · 895 阅读 · 0 评论 -
内核定时器和延迟
定时器#include <timer.h>struct timer_list { struct list_head entry; unsigned long expires; void (*function)(unsigned long); unsigned long data; struct tvec_base *base;#ifdef CONFIG_TIME转载 2016-06-16 00:08:36 · 502 阅读 · 0 评论 -
工作队列
工作队列允许睡眠#define create_workqueue(name)void destroy_workqueue(struct workqueue_struct *wq)void flush_workqueue(struct workqueue_struct *wq);int schedule_work(struct work_struct *work);转载 2016-05-23 00:09:07 · 486 阅读 · 0 评论 -
volatile和锁
让编译器不要将变量缓存到寄存器,而是每次去访问主板上的内存可见性 对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入 原子性 对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性(volatile的使用不要依赖自身)不被编译器优化XBYTE[2]=0x55;XBYTE[2]=0x56;使用地方中断服务转载 2017-04-26 19:10:09 · 593 阅读 · 0 评论 -
mtd设备操作、jffs2
安装 手动安装mtd-utils,根据系统自行选择举例#include #include #include #include int non_region_erase(int Fd,int start,int count,int unlock){ mtd_info_t meminfo; if(ioctl(Fd,MEMGETINFO,&meminfo) ==原创 2016-08-08 23:44:41 · 8045 阅读 · 0 评论 -
编译内核
删除源代码目录中残留的.o文件和其它从属文件# make mrproper配置内核 # make menuconfig编译内核# make dep清除内核编译的目标文件# make clean 编译内核# make zImage/uIamge区别:uIamge是由mkimage制作而来;uIamge是zIamge压缩而成,bootm需要先对uIamge解压,解压地址为内核入口地址;uboot目前只能转载 2016-07-18 23:24:42 · 1303 阅读 · 0 评论 -
nfs网络文件系统
安装# apt-get install nfs-kernel-server配置挂载目录和权限# vim /etc/exports/home/workdir/rootfs *(rw,sync,no_root_squash)重启# /etc/init.d/nfs restart转载 2016-06-28 23:33:45 · 433 阅读 · 0 评论 -
STC15控制数码管 38译码器
共阳极数码管举例#define MAIN_Fosc 27000000L //定义主时钟#include "STC15Fxxxx.H"// 函数原形定义#define uchar unsigned charvoid Led_test(void);void LED_OUT(uchar X);//数码管显示0-9值,全暗状态是0xFFunsigned char code LE...转载 2019-07-16 13:15:23 · 1225 阅读 · 0 评论 -
DS12C887实时时钟
实物图引脚定义GND、 VCC:直流电源,其中VCC接+5V输入,GND接地,当VCC输入为+5V时,用户可以访问DS12C887内RAM中的数据,并可对其进行读、写操作;当VCC的输入小于+4.25V时,禁止用户对内部RAM进行读、写操作,此时用户不能正确获取芯片内的时间信息;当VCC的输入小于+3V时, DS12C887会自动将电源发换到内部自带的锂电池上。MOT:模式选择脚,DA1...转载 2019-07-16 10:54:07 · 1887 阅读 · 0 评论 -
LED 控制卡 单元板 接口引脚定义
LED 12接口 使能 <--- OE A ---> 行选择信号 N B ---> 行选择信号 N C ---> 行选择信号 N CLK ---> 时钟信号 N LAT/ST ---> 锁存信号 N R ---> 红色数据 ...转载 2019-07-06 17:48:17 · 4813 阅读 · 2 评论 -
内存文件系统
tmpfs 虚拟内存文件系统tmpfs是一种基于内存的文件系统,和虚拟磁盘ramdisk比较类似像。tmpfs可以使用RAM,但它也可以使用swap分区来存储。传统的ramdisk是个块设备,要用mkfs来格式化它,才能真正地使用它。而tmpfs是一个文件系统,并不是块设备,只是安装它,就可以使用了。tmpfs是最好的基于RAM的文件系统注:使用tmpfs,编译内核时得选择”虚拟内存文件系统支持(V转载 2015-04-15 15:58:35 · 1008 阅读 · 0 评论 -
boa移植 boa交叉编译
官网:http://www.boa.org/BOA 服务器是一个小巧高效的web服务器,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器,源代码开放、性能高配置boa-0.94.13 # ./configure修改MakefileCC = arm-linux-gccCPP = arm-linux-gcc -E编译boa-0.94....转载 2018-09-23 13:48:53 · 1922 阅读 · 0 评论 -
dm9000网卡 S3C2440
配置U-Boot支持dm9000网卡 原理图 # vi drivers/net/Makefileobj-$(CONFIG_DRIVER_NET_CS8900) += cs8900.oobj-$(CONFIG_DRIVER_NET_SMC911X) += smc911x.oobj-$(CONFIG_DRIVER_NET_DM9000) +=...转载 2018-06-03 14:40:28 · 484 阅读 · 0 评论 -
串口 S3C2440A
电路图 寄存器 #define TXD0READY (1<<2)#define RXD0READY (1)#define PCLK 50000000 // init.c中的clock_init函数设置PCLK为50MHz#define UART_CLK PCLK // UART0的时钟源设为PCL...转载 2018-05-15 23:29:56 · 512 阅读 · 0 评论 -
K9F1G08U0B K9F2G08U0A K9F2G08U0M
原理图 引脚定义 命令转载 2018-05-14 21:55:00 · 1918 阅读 · 0 评论 -
LCD 驱动 S3C2440A
LCD Control 1 Register 以16BPP为例 LCD Control 2 Register LCDCON1 = (CLKVAL_TFT_640480&amp;amp;lt;&amp;amp;lt;8) | (LCDTYPE_TFT&amp;amp;lt;&amp;amp;lt;5) | \ (BPPMODE_16BPP&amp;amp;lt;&a转载 2018-05-20 21:42:21 · 213 阅读 · 0 评论 -
存储管理器 S3C2440A
CPU通过存储管理器来控制外部设备SDRAM存储结构 S3C2440A内存控制器 原理图 HY57V561620(L)T 4Banks x 4M x 16Bit Synchronous DRAM S3C2440A是由2个SDRAM组成一个32位寻址 Bank地址 寄存器 BANKCON6-BANKCON7专门用于SDRAM启动方式 参考S5PV210:http...转载 2018-05-13 19:40:53 · 466 阅读 · 0 评论 -
UAVCAN DSDL介绍
原文:http://uavcan.org/Specification/3._Data_structure_description_language/DSDL:Data structure description language实际上,就是自动生成的C++格式的数据结构。用来定义UAVCAN中的各种类型的消息。个人认为就是看着更清晰,理解起来更容易,也是UAVCAN的设计思想。使用C代码也...转载 2018-03-20 18:46:25 · 4593 阅读 · 5 评论 -
linux搭建stm32开发环境
下载stm32固件库 创建目录 libs目录放stm32固件库,src放用户源码,inc放用户头文件# mkdir libs src inc复制文件 将STM32F10x_StdPeriph_Lib_V3.5.0复制到libs目录下 创建Makefile.common 在主目录下创建Makefile.common文件,这个是通用Makefile文件#This ...转载 2018-03-02 14:25:16 · 5382 阅读 · 2 评论 -
BIN文件合并烧写
可以实现将Bootloader和Application合并烧写 使用UBIN.exe工具选择Bootloader源文件 添加Bootloader源文件 选择Application源文件 添加Application源文件 选择目标文件 合并生成目标文件 ...转载 2018-02-27 14:11:45 · 3300 阅读 · 0 评论 -
uavcan扩展帧格式 zubax
zubax_gnss_1.0和zubax_gnss_2.0中使用的uavcan的两种不同封装方式。都是采用扩展帧29b帧类型zubax_gnss_1.0 我的代码:https://github.com/zwx230741/zubax_gnss/tree/release_1.0 last_frame:判断是不是最后一包 frame_index:包计数 src/dst_node_id:转载 2017-11-14 17:06:08 · 2379 阅读 · 1 评论 -
arm-none-eabi/bin/ld: build/com.zubax.gnss.elf section `.text' will not fit in region `flash'
出现如下错误:/arm-none-eabi/bin/ld: build/com.zubax.gnss.elf section `.text' will not fit in region `flash'/arm-none-eabi/bin/ld: region `flash' overflowed by 5869 bytesbootloader编译,.text已经超过预设大小。修改方案有两个:转载 2017-11-04 21:46:39 · 5109 阅读 · 0 评论 -
Traceback (most recent call last): File "../zubax_chibios/tools/make_boot_descriptor.py", line 251
出现如下错误:Traceback (most recent call last): File "../zubax_chibios/tools/make_boot_descriptor.py", line 251, in <module> in_image.app_descriptor.version_major, File "../zubax_chibios/tools/make_b转载 2017-11-04 11:59:53 · 2032 阅读 · 2 评论 -
Eclipse 交叉编译环境
创建空工程 添加交叉编译环境 添加工程文件 如需修改交叉编译环境 Cross GCC:使用交叉编译命令编译,需要自己指定 MinGW GCC:使用make命令编译,需要有MakefileMake Targets 如果工程目录有很多目录,并且需要单独编译。则可以创建多个Target来单独编译 只写编译参数即可转载 2017-10-31 17:57:52 · 2632 阅读 · 0 评论 -
原子操作
原子操作指的是在执行过程中不会被别的代码中断的操作 位和整型变量原子操作依赖底层CPU的原子操作来实现,因此所有这些函数都与CPU架构密切相关整型原子操作定义typedef struct { int counter;} atomic_t;init#define ATOMIC_INIT(i) { (i) }设置原子变量值#define atomic_set(v,i) (((v)->cou原创 2017-05-27 19:14:30 · 1385 阅读 · 0 评论