[国嵌攻略][044][初始化Bss段]】的更多相关文章

BSS段的作用 1.变量存储的空间 初始化的全局变量:数据段 未初始化的全局变量:BSS段 局部变量:栈 动态分配变量:堆 2.为什么要对BSS段初始化 未初始化的全局变量在使用时才被赋值,未了避免在使用时忘记赋值,导致使用随机值.由系统工程师在系统启动时,把BBS清零. 初始化BSS段 找到BSS段起始地址和结束地址向其中填零,BSS段地址记录在链接器脚本中 /* *名称:init_bss *功能:初始化BSS段 */ init_bss: ldr r1, =bss_start ldr r2,…
程序构成 代码段.数据段.BSS段(Block Started by Symbol,又叫:未初始化数据段).堆(heap)和栈(stack).这些部分构成了Linux应用程序的重要组成部分. 内存布局 1.从低地址到高地址分别为:代码段(0x8048000).数据段.BSS段.堆.栈. 2.堆向高内存地址生长. 3.栈向低内存地址生长. 查看程序段地址 cat /proc/进程号/maps 数据存放 1.代码段:全局常量 2.数据段:全局变量(初始化的以及未初始化的).静态变量(全局的和局部的,…
MMU配置与使用 1.通过点亮LED使用虚拟地址来使用MMU,采用段页映射方式 2.任务步骤:1.建立一级页表 2.写入TTB 3.打开MMU 代码编写 1.虚拟地址的段地址0xA0000000,一级页表的起始地址0x30000000(通常放在内存的起始地址),物理地址的段地址0x56000000 2.表项的位置等于一级页表的起始地址加上虚拟地址的高12位 3.表项的内容 Section base address:段基地址 SBZ:保持0 AP:访问权限,设置为11表示任意情况可读可写,在ARM…
USB驱动模型 1.USB host controller driver(主控器驱动):为USB主控制器提供驱动程序 2.USB core(USB核心):连接USB主控制器驱动和USB设备驱动 3.USB client driver:为USB外部设备提供驱动程序 USB设备模型 device(设备)->config(配置)->interface(接口)->endpoint(端点),构成了USB设备的四个层次.一个usb driver(驱动)对应的是一个interface(接口).一个接口…
SPI Flash驱动 1.打开/drivers/mtd/devices/m25p80.c驱动文件.找到初始化m25p80_init函数,其中通过spi_register_driver来注册spi设备驱动.需要的参数是struct spi_driver指针结构. 2.匹配函数是在m25p_probe中. 3.写操作是在m25p80_write中.要写的事务通过spi_message提交给spi_master控制器,一个spi_message事务又分为很多spi_transfer操作. 4.当写入…
SPI 子系统架构 1.SPI core核心:用于连接SPI客户驱动和SPI主控制器驱动,并且提供了对应的注册和注销的接口. 2.SPI controller driver主控制器驱动:用来驱动SPI控制器. 3.SPI protocol drvier客户驱动:用来驱动SPI设备 SPI控制器驱动分析 1.SPI控制器驱动对应的内核文件在/drivers/spi/spi_s3c24xx.c中.找到模块初始化函数s3c24xx_spi_init,从中可以看出控制器驱动是平台驱动. 2.找到初始化函…
SPI控制器工作流程 SPI控制器提供2个SPI接口.每个SPI接口有两个通道,分别为TX通道和RX通道.CPU要写数据到FIFO中,先写数据到SPI_TX_DATA寄存器中,这样此寄存器中的内容就会自动移动到发送FIFO中:同理,如果CPU要从接收FIFO中读取数据,就访问寄存器SPI_RX_DATA,紧接着接收FIFO的数据就会自动移动到SPI_RX_DATA寄存器中. OK6410 SPI裸机程序分析 //SPI初始化 u8 SPI_Init(){ //SPI复位 CH_CFG0 |= B…
eeprom简介 eeprom电可擦除可编程只读存储器,是一种类似于flash的固态存储器,但是与flash相比又存在一些区别: 1.eeprom可以按位擦写,而flash只能大片擦除. 2.eeprom一般容量都不大,一般都在64kb以下. I2C初始化 在ARM内部有I2C控制器,可以对I2C器件进行访问.所以I2C初始化也就是对I2C控制器初始化. 1.如果需要,写入处理器的I2C从设备地址. 2.设置IICCON寄存器 2.1.允许中断 2.2.设置SCL周期 3.设置IICSTAT允许…
初始化 打开/drivers/mtd/nand/s3c2410.c找到nand flash驱动程序代码,找到模块初始化函数s3c_nand_init,找到platform_driver中的probe函数. 1.使能时钟 2.进行物理地址到虚拟地址转换 3.硬件纠错初始化 4.搜索nand flash 5.注册分区信息 nand flash读操作 nand flash读写函数位于通用驱动/drivers/mtd/nand/nand_base.c.nand flash的读函数位于nand_read的…
LCD驱动程序分析 LCD驱动程序代码在/drivers/video/s3c2410fb.c文件中,在该驱动的s3c2410fb_init中注册了平台驱动,该驱动的初始化代码在s3c24xxfc_probe函数中. 1.分配fb_info结构,使用framebuffer_alloc 2.获取LCD控制器的物理地址,并将其转化为虚拟地址 3.初始化fb_info结构 3.1.设置fb_ops 4.分配帧缓冲内存,LCD控制器通过DMA来访问帧缓冲,使用dam_alloc_writecombine…
LCD裸机驱动回顾 1.LCD初始化 1.1.控制器初始化 1.2.端口初始化 1.3.指明了帧缓冲 2.LCD图形显示 2.1.将图形数据写入帧缓冲 Linux帧缓冲体验 把图片转换成开发板屏对应的宽高像素和颜色深度,然后把图片放到开发板文件系统中.通过cat image.bin > /dev/fb0命令把图片写入LCD帧缓冲,这样就可以在LCD屏上看到对应的图片.这个实验说明Linux下面一样使用了帧缓冲,并且帧缓冲变成了一个设备文件. Linux帧缓冲架构 应用程序通过把图像数据写入/de…
网卡初始化 1.分配描述结构,alloc_etherdev 2.获取平台资源,platform_get_resource 2.1.在s3c_dm9k_resource中有相关的资源 2.2.add地址由CS4和ADD2决定,是20000000 2.3.dat地址由CS4和ADD2决定,是20000004 2.4.中断资源是EINT7 3.虚拟地址映射,ioremap 4.读取芯片类型 5.设置操作函数集 6.读取MAC地址 7.注册网卡驱动,register_netdev 8.启动发送队列,ne…
进程与程序 1.程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体. 2.进程:是一个执行中的程序,它是一个动态的实体. 进程四要素 1.有一段程序供其执行.这段程序不一定是某个进程所专有,可以与其他进程共用. 2.有进程专用的内核空间堆栈. 3.在内核中有一个task_struct数据结构,也就是通常所说的进程控制块(PCB).有了这个数据结构,进程才能成为内核调度的一个基本单位,接受内核的调度. 4.有独立的用户空间. 如果有独立的用户空间,那么是进程:如果没独立的用户空间,…
第1类 时间编程类 1.1 获取日历时间 1.1.1 函数名 time 1.1.2 函数原形 time_t time(time_t *t) 1.1.3 函数功能 返回日历时间 1.1.4 所属头文件 <time.h> 1.1.5 返回值 成功:日历时间失败:-1 1.1.6 参数说明 t:不为空的情况下保存返回值   1.2 获取格林威治时间 1.2.1 函数名 gmtime 1.2.2 函数原形 struct tm *gmtime(const time_t *timep) 1.2.3 函数功…
Core Dump定义 Core Dump又叫核心转存.当程序在运行过程中发生异常,Linux系统可以把程序出错时的内存内容存储在一个core文件中,这个过程叫Core Dump. Core Dump主要用来对付Segment fault错误.Linux应用程序在运行过程中,经常会遇到Segemt fault(段错误)这样的错误.产生这样错误的原因通常有: 数组访问越界 访问空指针 栈溢出 修改只读内存 Core Dump使能 在Linux系统中,默认是关闭core dump功能的,但是可以通过…
Bootloader作用 1.初始化软硬件 2.启动操作系统 内核分类 1.zImage 不加信息头的内核 2.uImage 加信息头后的内核,用bootm命令来启动 bootm作用 1.检测信息头:压缩.操作系统.幻数 2.根据OS信息调用相应的处理函数:获取内核地址.知道CPU型号.设置启动参数 代码编写 1.获取启动地址 2.设置启动参数 2.1设置核心启动参数 2.2设置内存参数 2.3设置命令行参数 2.4设置参数结束行标志 3.启动操作系统 /********************…
TFTP作用 用于网络下载,TFTP客户机在TFTP服务器中下载文件. TFTP交换过程 1.配置TFTP服务器 vim /etc/xinetd.d/tftp 2.交换过程 客户端发请求包到服务器 服务器发数据包到客户段 客户端发相应包到服务器 TFTP报文格式 操作码 1 请求报文 2 写入报文 3 数据报文 4 应答报文 5 出错报文…
移植代码:通过已有的可用的代码修改到新环境下运行. 代码编写: 初始化网卡 1.选中网卡 nLAN_CS BWSCON(0x48000000) DW4:01 16bit BANKCON4(0x48000014) (0x0<<13)|(0x0<<11)|(0x7<<8)|(0x1<<6)|(0x0<<4)|(0x0<<2)|(0x0<<0) 2.初始化中断 中断源EIN7 GPFCON GPF7:10 设置触发方式(高电平触…
LCD初始化 1.引脚初始化 2.时序初始化 VBPD(vertical back porch):表示在一帧图像开始时,垂直同步信号以后的无效的行数 VFBD(vertical front porch):表示在一帧图像结束后,垂直同步信号以前的无效的行数 VSPW(vertical sync pulse width):表示垂直同步脉冲的宽度,用行数计算 HBPD(horizontal back porch):表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数 HFPD(horizon…
初始化DMA控制器 1.设置源地址 DISRC(0x4B000000)设置为发送数据的源地址,DISRCC0(0x4B0000004)设置为内存AHB总线,目的地址增长 2.设置目的地址 DIDST0(0x4B00000C)设置为发送数据的目的地址,DIDSTC0设置中断模式为数据减为0,设置串口APH总线,目的地址不增长 3.设置DMA控制寄存器 DCON0(0x4B000010)设置请求源为中断(26-24位),设置DMA请求源为硬件(23位),关闭重载(22位),设置发送数据长度(19-0…
NandFlash读数据方式 1.页读,读出页中主数据区的所有数据,提供页地址(行地址) 2.随机读,读出页中指定的存储单元的数据,提供页地址(行地址)和页内偏移(行地址) 代码编写 1.根据NandFlash中的读时序图写出工作流程,可以通过在芯片手册中搜索operation找到相关描述 2.主要关心的是IO脚上时序的变化 3.初始化闪存分为初始化闪存控制器和闪存芯片 4.对位操作 4.1.清零 x &= ~(y<<z)   对x的z位开始的y清零 4.2.置1 x |= y<…
MMU功能解析 1.Memory Management Unit(存储器管理单元) 2.两个进程读取同一个地址能读到不同的值.因为进程访问的是虚拟地址,通过MMU转换成不同的物理地址.不同的进程通过MMU有不同的映射规则 3.如果MMU没有工作,那么在程序中使用的是物理地址.为避免程序物理地址冲突,在系统中会使用虚拟地址 4.MMU最重要的作用就是把虚拟地址转换成物理地址,其次就是控制访问权限 MMU地址转换 1.在ARM核手册的内存管理部分有相关描述 2.MMU把32位的虚拟地址转换成物理地址…
[一跃进入C大门] 跳转方式 1.相对跳转:b或bl指令,通过计算两个地址之间的差值来给pc赋值相对跳转 2.绝对跳转:ldr指令,通过给pc直接赋值,完成绝对跳转 代码编写 1.在汇编代码中直接使用绝对跳转,跳转到C代码中,然后在C代码中通过点亮LED来验证 2.210在跳转到C程序时,需要注意复制代码时,要跳过校验信息.要不然跳转到内存时,前16个字节为头信息,整个起始地址向后偏移了16个字节,就找不到正确地址了 [C与汇编混合编程] 为什么需要C与汇编混合编程 1.汇编语言:执行效率高,编…
数据库系统构成 在计算机系统中,保存数据的方式一般有两种: 1.普通文件方式 2.数据库方式 相比于普通文件方式,使用数据库来管理大批量数据具有更高的效率与安全性. 数据库系统一般由三个部分构成 1.数据库 2.数据库管理系统 3.数据库访问应用 sqlite属于数据库管理系统.在数据库中,数据都是以表的形式存在.表与表之间,可能存在关系.sql(结构化查询语言),是一种特殊的编程语言,用于访问数据库中的数据. 移植sqlite到开发板 1.解压 tar zxvf sqlite-autoconf…
未加密传输的安全弊端 如果在网络传输中没有加密,就是以明文传输.传输的数据可以被抓包软件直接截获,并能读取里面的数据. 加密基本原理 1.对称加密 2.非对称加密 2.1.公钥私钥 公钥和私密要配对.公钥加密的数据用私钥来解密,私钥加密的数据用公钥来解密. 2.2.数字证书 当公钥被替换成别的公钥之后,替换前对应的私钥就不能解密了,只能用替换后对应的私钥解密.但是并不能判断公钥是否被替换.所以引入数据证书的概念.数字证书由权威机构发布,所以无法伪造.并且数字证书里面包含公钥和对应所有者信息,所以…
CGI程序(Common Gate Way Interface) 在服务器外部供服务器调用的程序,CGI程序与服务器配合后能让服务器完成更强大的功能. 1.浏览器通过HTML表单或超链接请求指向一个CGI应用程序的URL. 2.服务器收发到请求. 3.服务器执行指定所CGI应用程序. 4.CGI应用程序执行所需要的操作,通常是基于浏览者输入的内容. 5.CGI应用程序把结果格式化为网络服务器和浏览器能够理解的文档(通常是HTML网页). 6.网络服务器把结果返回到浏览器中. 移植CGI库 1.解…
1.解压boa嵌入式web服务 tar zxvf boa-0.94.13.tar.gz 2.进入src目录生成配置文件 ./configure 3.修改生成的Makefile CC=arm-linux-gcc CPP=arm-linux-gcc –E 4.修改源文件 4.1. vim util.c +100 time_offset = 0; 4.2. vim bao.c +211 去掉DIE();相关部分 4.编译 make 5.拷贝到根文件系统 cp boa .../rootfs/sbin 6…
V4L2摄像编程模型 1.打开摄像头设备文件 2.获取驱动信息-VIDIOC_QUERYCAP 3.设置图像格式-VIDIOC_S_FMT 4.申请帧缓冲-VIDIOC_REQBUFS 5.获取帧缓冲的地址长度信息-VIDIOC_QUERYBUF 6.使用mmap把内核空间的帧缓冲映射到用户空间 7.帧缓冲入队列-VIDIOC_QBUF 8.开始采集图像-VIDIOC_STREAMON 9.取出帧缓冲(出队)-VIDIOC_DQBUF 10.访问帧缓冲 11.帧缓冲重新入队-VIDIOC_QBU…
查看USB设备的生产商ID和设备ID 示例: lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 生产商ID是1d6b,设备ID是0002 创建USB总线型字符设备 usb_register_dev   //效果同cdev创建字符设备效果相同 创建的主设备号都是180,次设备号可以设置为100 头文件 <linux/usb.h> usb.c /*********************************…
软件系统架构 1.主机端软件架构 USB设备驱动->USB核心->USB主控制器驱动->USB主控制器 2.设备端软件架构 Gadget驱动->Gadget API->UDC驱动->USB控制器 MassStrorage驱动体验(host 接口) 可以让主机挂载大容量存储器 1.主控器驱动配置 make menuconfig ARCH=arm device drivers->usb support->[*]support for host-side usb-…