- 博客(61)
- 资源 (31)
- 收藏
- 关注
原创 ARM跑马灯·汇编程序详细解析 .
本人使用的是TQ2440开发板,主芯片是S3C2440,它一共有130个I/O端口,分为9组:GPA、GPB...GPJ。 对于这几组GPIO引脚,它们的寄存器是相似的: GPxCON:用于选择引脚功能 GPxDAT:用于读、写引脚数据 GPxUP:用于确定是否使用内部上拉电阻 ,其中无GPAUP寄存器!注意:PORT A与PORT B~PORT J 在功能选择
2014-10-23 21:16:18
2441
转载 Linux操作系统根文件系统的启动分析
一般的系统是先启动/sbin/init,但是也可通过启动参数指定init=来确定,如:我的系统就是制定的init=/linuxrc,因为文件系统是采用busybox的,而linuxrc。也是一个指向busybox的文件,不过不确认它指向具体哪个指令。不过可能是/sbin/init。init进程的主要任务是按照inittab文件所提供的信息创建进程,由于进行系统初始化的那些进程都由i
2013-03-14 12:33:12
629
转载 dd命令的高级应用
dd是Linux上的一个常用的命令。 例如:dd if=/1.txt of=/tmp/2.txt (其中, if代表input file;of代表output file, 命令的结果就是将根目录下的1.txt的内容拷贝到/tmp目录的的2.txt。) 当然,如果只是用dd做这样的事情显然大材小用了,因为cp可以干同样的事情,而且更简单。 下面就介绍一下
2013-03-14 12:25:52
1140
转载 linux 下查找文件或者内容常有命令
whereis 查找软件的安装路径-b 只查找二进制文件-m 只查找帮助文件-s 只查找源代码-u 排除指定类型文件-f 只显示文件名-B 在指定目录下查找二进制文件-M 在指定目录下查找帮助文件-S 在指定目录下查找源代码locate 在文件索引数据库中搜索文件-d 搜索指定数据库updatedb更新文件索引数据库f
2013-03-12 18:03:12
624
转载 LINUX 根文件系统加载,不同文件系统的挂载和 操作方法(VFS虚拟文件系统) --2
Linux启动盘boot/root盘的制作boot/root盘由两部分组成,即核心和根文件系统。要把这两部分都放到一个1.44MB的软盘上去,通常要对内核和根文件系统进行压缩,压缩核心的最好方法是进行重新编译内核,将一些不必要的支持去掉,如对网络和其它周边设备的支持,重要的一点是记住内核必须支持RAMDISK及ext2,否则系统不能正常引导。关于内核的编译本文不再阐述,下面重点介绍如何生成根文
2013-03-12 18:02:34
1646
转载 uboot从usb(fat)分区加载内核
第一步:内核的支持。修改linux source中的.config文件。CONFIG_CMDLINE="console=ttyS0,115200 mem=160m ip=off noinitrd root=8:1 rw rootfstype=ext2 rootdelay=10"8为sda(即U盘)的主设备号,1为第一个分区,是ext2系统,rootdelay表示延迟10秒加载,原因为u
2013-03-06 17:38:07
1598
转载 使Uboot支持USB的步骤
今天查看了一下在P4080DS板子的U-Boot中支持USB,主要是加入USB Host端驱动和相应设备端驱动来支持存储设备,这样就 可以将Kernel以及文件系统存放在U盘上,来通过U盘来启动。跟其它接口一样,在U-Boot中,USB的支持也是通过放在相应板子上的几个宏定义来实现,对于P4080DS板,是在include/configs/corenet_ds.h定义:----------
2013-03-06 17:36:47
1837
转载 linux开机过程中的内核打印
前言嵌入式开发中, 通常使用串口输出调试信息,了解运行状态。 内核启动过程中,在不同阶段会通过不同的方式将调试信息输出到串口。 (注:以下内容针对 arm-linux.)解压缩阶段解压缩阶段内核会输出:Uncompressing Linux................................ done, booting the kernel. 查
2013-03-04 11:58:16
833
转载 在嵌入式Linux上构建2个串口控制台
当前的很多嵌入式系统很多使用2个串口来进行通讯,一个串口常常作为命令行串口,给用户使用。而另一个串口可以用来通信或者作为调试串口使用。 本文以两个串口在Linux下 一个作为调试串口,另一个作为用户命令行串口为例说明。首先,ttyS0作为调试串口,而ttyS1作为命令行串口使用。等系统启动后,命令行串口对用户是可见的,用户可以操作。而调试串口只给开发人员使用。 在系统启
2013-03-04 11:57:24
1328
转载 将linux启动由com0转为com1,只需要修改:
总结:将linux启动由com0转为com1,只需要修改:(1)uncompress.c,将启动输出设为uart0(2)在serial8250_init()之中加入myinit(),保证uart1能够工作(3)修改serial.h 将uart1设置为正确的地址(5)修改启动参数加入console=ttyS1,115200n8(4)修改/etc/inittab保证启动之后,使用t
2013-03-04 11:56:30
594
转载 嵌入式Linux内核移植相关代码分析
饮水思源 - 主题文章阅读 [讨论区: Embedded]本主题共有 6 篇文章,分 1 页, 当前显示第 1 页 [返回讨论区][回复本文][原帖] 发信人: patrickzhang (一塌糊涂), 信区: Embedded标 题: 嵌入式Linux内核移植相关代码分析发信站: 饮水思源 (2006年12月13日10:37:42 星期三)
2013-02-28 17:48:19
542
转载 华为--C++ 笔试面试题目
本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。 许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。读者可从本文看到strcpy函数从2分到10分
2013-02-28 17:42:59
420
转载 ARMlinux kernel 启动之start_kernel (二)
了解完kernel启动以前的汇编之后我们来看看正式的c语言启动代码,也就是我们的start_kernel函数了。start_kernel相当大,里面每一个调用到的函数都足够我们伤脑筋了,我这里只是浅尝辄止的描述一下函数的功能,从而对kernel启动的过程有一个比较直观的了解。很多函数真正理解需要对linux相关体系有很深的了解,暂时没有时间深入,留待以后了。 说实话启动的代码看到现
2013-02-28 17:39:19
387
转载 ARM linux kernel启动流程 head.S(一)
1. kernel运行的史前时期和内存布局在arm平台下,zImage.bin压缩镜像是由bootloader加载到物理内存,然后跳到zImage.bin里一段程序,它专门于将被压缩的kernel解压缩到KERNEL_RAM_PADDR开始的一段内存中,接着跳进真正的kernel去执行。该kernel的执行起点是stext函数,定义于arch/arm/kernel/head.S。在分析st
2013-02-28 17:38:42
578
转载 制作linux下根文件系统
(1)创建根文件系统的基本目录结构。我把这个过程做成了shell脚本(文件名为mkroot) ,很方便! #! /bin/sh echo "creatint rootfs dir......" mkdir rootfs cd rootfs echo "making dir : bin dev etc lib proc sbin sys usr"
2013-02-26 17:46:44
586
转载 LDR指令详解(转载)
LDR指令详解(2009-10-27 11:26:31)ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令。(1)LDR r0,=name,像这种带等号的是伪指令,而不是ARM指令,LDR 伪指令用于加载立即数或一个地址值到指定寄存器.*如果name是立即数的话:LDR R0,=0X123;//将0X123存入R0 *如果name是个标识符:LDR
2013-02-25 12:23:20
1435
转载 ARM跑马灯·汇编程序详细解析
本人使用的是TQ2440开发板,主芯片是S3C2440,它一共有130个I/O端口,分为9组:GPA、GPB...GPJ。 对于这几组GPIO引脚,它们的寄存器是相似的: GPxCON:用于选择引脚功能 GPxDAT:用于读、写引脚数据 GPxUP:用于确定是否使用内部上拉电阻 ,其中无GPAUP寄存器!注意:PORT A与PORT B~PORT J 在功能选择
2013-02-25 12:18:22
1396
转载 使Uboot支持USB的步骤
今天查看了一下在P4080DS板子的U-Boot中支持USB,主要是加入USB Host端驱动和相应设备端驱动来支持存储设备,这样就 可以将Kernel以及文件系统存放在U盘上,来通过U盘来启动。跟其它接口一样,在U-Boot中,USB的支持也是通过放在相应板子上的几个宏定义来实现,对于P4080DS板,是在include/configs/corenet_ds.h定义:----------
2013-02-21 22:28:33
3414
转载 s3c2410移植nand支持到uboot, 使用nand.c ,linux mtd 架构
-boot-1.1.6与1.1.4相比,两者有较大的不同,1.1.6 更像是复制了 kernel 的方法来实现。下面对nand flash的初始化代码nand_init()进行分析:1.如果定义(CONFIG_COMMANDS & CFG_CMD_NAND)没定义(CFG_NAND_LEGACY) 则start_armboot()调用driver/nand/nand.c中的na
2013-02-18 23:01:43
497
转载 解决undefined reference to `__aeabi_uidivmod'、 `__aeabi_uidiv'错误
自己写裸机驱动程序时,使用了除法,在链接的时候出了如下错误: 使用的编译器是: 后来上网搜了一下原因,由于编译器不支持除法运算,但是也没有搜到解决方案。看了一下代码确实用到了除法,把除法去掉可以正常连接通过。后来想了想了,之前编译内核和编译u_boot都是这个编译器的呀,他们肯定有除法运算呀,他们是怎么做到的呢?于是看了一下u_boot的Makefile
2013-02-18 13:16:16
1190
转载 U-Boot操作Flash (NOR, NAND & SPI)
U-Boot中操作三种flash的命令集: Action NOR NAND SPICopy Flash
2013-02-05 12:07:42
4130
转载 CFI Flash, JEDEC Flash ,Parellel Flash, SPI Flash, Nand Flash,Nor Flash的区别和联系
CFI Flash, JEDEC Flash ,Parellel Flash, SPI Flash, Nand Flash,Nor Flash的区别和联系简单说就是,Flash,按照内部访问接口不同,分为两种,一种是就像访问SDRAM一样,按照数据/地址总线直接访问的Nor Flash,另一种是只有8位(X8)/16位(X16)或者更多(X32/…)位宽的总线,每次访问,都要将长地址分
2013-02-05 12:03:23
1182
转载 u-boot的重要细节
主要分析流程中各函数的功能。按启动顺序罗列一下启动函数执行细节。按照函数start_armboot流程进行分析: 1)DECLARE_GLOBAL_DATA_PTR; 这个宏定义在include/global_data.h中: #define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("
2013-02-04 17:35:23
540
转载 U-BOOT源码分析及移植
本文从以下几个方面粗浅地分析u-boot并移植到FS2410板上:1、u-boot工程的总体结构2、u-boot的流程、主要的数据结构、内存分配。3、u-boot的重要细节,主要分析流程中各函数的功能。4、基于FS2410板子的u-boot移植。实现了NOR Flash和NAND Flash启动,网络功能。 这些认识源于自己移植u-boot过程中查找的资料和对源码的简单阅读。下
2013-02-04 17:34:10
447
转载 C语言字符串函数集锦(二)
说起字符串函数,我想大家都不陌生。字符串函数对二进制数据、字符串和表达式执行不同的运算。下面总结了C语言中的字符串函数。13、函数名: strncmpi功 能: 把串中的一部分与另一串中的一部分比较, 不管大小写用 法:int strncmpi(char *str1, char *str2); 程序例:#include #includ
2013-02-01 09:53:20
361
转载 C语言字符串函数集锦(一)
说起字符串函数,我想大家都不陌生。字符串函数对二进制数据、字符串和表达式执行不同的运算。下面总结了C语言中的字符串函数。1、函数名: stpcpy功 能: 拷贝一个字符串到另一个用 法:char *stpcpy(char *destin, char *source); 程序例:#include #include int main
2013-02-01 09:51:29
263
原创 __attribute__机制使用实例
typedef int (*obds_test_t) (void); #define RUN_TEST_COMMON(name, func) \ static int obds_##func (void) \ {
2013-01-31 12:34:38
523
原创 imx53 计算各个模块的时钟函数
/*! * This function returns the low power audio clock. */u32 get_lp_apm(void){ u32 ret_val = 0; u32 ccsr = readl(CCM_BASE_ADDR + CLKCTL_CCSR); if (((ccsr >> 10) & 1) == 0) {
2013-01-30 17:33:31
841
原创 imx53 时钟设置过程和详细说明
/* The function prog_pll sets up all four PLLs as follows: PLL1 800MHz PLL2 400MHz PLL3 216MHz PLL4 595MHz */void prog_pll(void){ // Clear ESDCTL configuration bit to al
2013-01-30 17:31:56
1258
原创 imx53 时钟dpll分析
DPLL reference clockThere are four DPLL's in i.MX53 project namely:• DPLL-1 (typical functional frequency 800Mhz)• DPLL-2 (typical functional frequency 400Mhz)• DPLL-3 (typical functional freq
2013-01-30 17:29:59
892
原创 完成16进制数到10进制转换
/* slen - streng length, e.g.: 23 -> slen=2; abcd -> slen=4 *//* only convert hex value as string input. so "12" is 0x12. */static u32 quick_atoi(char *a, u32 slen){ u32 i, num = 0, digit; f
2013-01-29 17:38:08
522
原创 AHB、APB简介
AHB主要用于高性能模块(如CPU、DMA和DSP等)之间的连接,作为SoC的片上系统总线,它包括以下一些特性:单个时钟边沿操作;非三态的实现方式;支持突发传输;支持分段传输;支持多个主控制器;可配置32位~128位总线宽度;支持字节、半字节和字的传输。AHB 系统由主模块、从模块和基础结构(Infrastructure)3部分组成,整个AHB总线上的传输都由主模块发出,由从模块负责回应。基础结构
2013-01-29 17:36:28
872
转载 宝宝受不了挫折的5大原因 6招让孩子变坚强
如今的孩子多是家中独苗,被满满当当的爱包围着,承受力普遍较差。而日后成功者,必定要有所担当,能耐得住生活中的各种考验。这个道理再简单不过,但很多家长爱子心切,做起来还是犯了傻。 孩子为啥“受不了丁点委屈、吃不得一点苦”?本期,记者联合3位资深嘉宾一起探寻出五大形成“病因”,并开出几种对症性“疗方”。要想让孩子的内心变得强大起来,也许你还得学着做一个“爱而不露”的家长,甚至故意给孩子制造
2013-01-28 22:48:08
1138
转载 uboot命令解释与运行分析
这一回来分析一下uboot中命令行的解释, 所以我们直接从main_loop开始分析.1. 从汇编阶段进入c阶段的第一个函数是start_xxx, 如/lib_unicore/board.c中的start_unicoreboot. 前半部分调用了若干初始化函数来进行部分硬件的初始化, 并设置一下环境. 这里不是我们本回要讨论的所以一一跳过. 在start_xxx的最后调用了main_loop(
2013-01-25 17:34:41
463
转载 uboot命令大全
U-Boot还提供了更加详细的命令帮助,通过help命令还可以查看每个命令的参数说明。由于开发过程的需要,有必要先把U-Boot命令的用法弄清楚。接下来,根据每一条命令的帮助信息,解释一下这些命令的功能和参数。1、bootmbootm [addr [arg ...]]- boot application image stored in memorypassing arg
2013-01-25 17:33:19
382
原创 Uboot中raise: Signal # 8 caught解决
同样首先找到这句话在程序中的位置,如下:/lib_arm/eabi_compat.cint raise (int signum){ printf("raise: Signal # %d caught\n", signum); return 0;}再搜索这个函数的调用情况,可是怎么找不到对应的程序,不知道为什么?求解?没能找到根本原因,
2013-01-25 17:30:01
1640
原创 Uboot中*** Warning - bad CRC or MMC, using default environment解决
首先找到打印此信息的位置,搜索可知在/common/env_cmm.c文件中。程序如下:#if !defined(ENV_IS_EMBEDDED)static void use_default(){ puts ("*** Warning - bad CRC or MMC, using default environment\n\n"); se
2013-01-25 17:28:44
6361
转载 uboot第一阶段详细分析
uboot的第一阶段设计的非常巧妙,几乎都是用汇编语言实现的,下面我们一起来看看它的精妙之处吧!首先我们来看一下它的链接脚本,通过它我们可以知道它整个程序的各个段是怎么存放的。OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm) EN
2013-01-24 12:44:04
570
I2C总线芯片AT24C02程序设计(精简版)
2010-12-21
18B20温度传感器应用解析(中)
2010-12-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人