08 2017 档案
摘要:insmod:加载模块 参数: -f 不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入。-k 将模块设置为自动卸除。-m 输出模块的载入信息。-o <模块名称> 指定模块的名称,可使用模块文件的文件名。-p 测试模块是否能正确地载入kernel。-s 将所有信息记录在
阅读全文
摘要:在上节制作busybox后(位于/work/nfs_root/mini_fs), 然后根据以下5个来构建最小根文件系统: (1)/dev/console(终端控制台, 提供标准输入、标准输出以及标准错误) (2)init进程的程序(也就是busybox,因为init程序位于busybox中,已经完成
阅读全文
摘要:在上一节分析出制作一个最小的根文件系统至少需要: (1)/dev/console(终端控制台, 提供标准输入、标准输出以及标准错误) (2)init进程的程序(也就是busybox,因为init程序位于busybox中) (3)/etc/inittab(用于init进程读取配置, 然后执行initt
阅读全文
摘要:本节目标: (1) 了解busybox(init进程和命令都放在busybox中) (2) 创建SI工程,分析busybox源码来知道init进程做了哪些事情 (3) 分析busybox中init进程 init_main() (3.1)熟悉init进程的inittab配置文件(位于/etc/init
阅读全文
摘要:本章学习如何启动第一个应用程序 1.在前面的分析中我们了解到,在init进程中内核挂接到根文件系统之后,会开始启动第一个应用程序: kernel_init函数代码如下: 2.接下来开始分析init_post()如何启动应用程序的,代码如下: 当我们删除根文件系统的内容再启动内核,发现串口就会打印上面
阅读全文
摘要:编译C 首先,程序编译过程有: 1.预处理(展开宏,头文件,检查代码是否有误) 2.编译(将.c转为汇编代码.s) 3.汇编(将汇编代码.s转为机器代码.o) 4.链接(将所有机器代码.o和库文件链接成一个可执行程序) 一般编译常常包括了:预处理,编译,汇编 在linux系统中,编译c使用gcc编译
阅读全文
摘要:主设备号:为了区分不同类型的设备 次设备号:为了区分同一设备下不同子设备 例如 通过ls /dev/null -l ,查看null设备: 实例:
阅读全文
摘要:mount:用于挂载文件系统,使能访问其它文件系统中的资源 umount:用于卸载已挂载的文件系统 mount: 格式: mount [-参数] [设备名称] [挂载点] 其中常用的参数(参数默认自带读写):-a 安装在/etc/fstab文件中类出的所有文件系统。-f 伪装mount,作出检查设备
阅读全文
摘要:名称:ps(process status) 使用权限:所有使用者说明:显示瞬间进程 (process) 的动态 ps -A 显示所有程序。 ps -l 显示详细信息 示例: 比如输入ps查看进程,如下图: 其中输出状态栏参数: PID 该 process 的号码 UID 程序被该 UID 所拥有,0
阅读全文
摘要:内核启动并初始化后,最终目的是像Windows一样能启动应用程序,在windows中每个应用程序都存在C盘、D盘等,而linux中每个应用程序是存放在根文件系统里面,那么挂载根文件系统在哪里,怎么实现最终目的运行应用程序? 1.内核运行应用程序步骤: 1.1首先是进入stext函数启动内核: 1.2
阅读全文
摘要:内核启动分析之start_kernel初始化函数(init/main.c) stext函数启动内核后,就开始进入start_kernel初始化各个函数, 下面只是浅尝辄止的描述一下函数的功能,很多函数真正理解需要对linux相关体系有很深的了解后才能明白 代码如下: 然后进入rest_init():
阅读全文
摘要:目标: (1)创建Source Insight 工程,方便后面分析如何启动内核的 (2)分析uboot传递参数,链接脚本如何进入stext的 (3) 分析stext函数如何启动内核: (3.1) 关闭irq和fiq,设置svc管理模式 (3.2)判断是或支持这个CPU (3.3)判断是否支持这个单板
阅读全文
摘要:简介: ARM指令中多数据传输共有两种: LDM:(load much)多数据加载,将地址上的值加载到寄存器上 STM:(store much)多数据存储,将寄存器的值存到地址上 主要用途:现场保护、数据复制、参数传送等,共有8种模式(前面4种用于数据块的传输,后面4种是堆栈操作)如下: (1)IA
阅读全文
摘要:目标: 通过分析makefile,明白make uImage如何编译内核 把整个内核的makefile分成三类(makefile资料文档在linux-2.6.22.6/Documentation/build/makefiles.txt) <1>各级子目录makefile(每个子目录都有makefil
阅读全文
摘要:目标: 分析make menuconfig内核配置过程 在上1小结中(内核编译试验)讲到了3种不同的配置: (1)通过make menuconfig 直接从头到尾配置.config文件 (2) 通过make s3c2410_deconfig 命令在默认的配置上进行自动修改.config文件 (3)使
阅读全文
摘要:在分析内核启动过程的./arch/arm/Makefile文件里碰到了这样字段 然后在子目录arch/arm/kernel/vmlinux.lds文件中又用到了TEXT_OFFSET 上网一查export才知道: 这个是用来提供该子目录makefile(sub make)中访问的,同一级的另外一个m
阅读全文
摘要:= 无关位置的等于,值永远等于最后的值 比如: := 有关位置的等于,值取决于当时位置的值 比如: ?= 是如果没有被赋值过就赋予等号后面的值+= 是添加等号后面的值 $(x) 表示引用变量x,一般调用的是用:=复制的变量 $(PWD) 表示当前目录 % 通配符,比如有a.c,b.c,c.c,则%.
阅读全文
摘要:目标: 1.给内核打补丁 2.配置 3.编译 4.重启 1 内核打补丁 1.1 通过FTP将Windows里system目录下linux-2.6.22.6.tar.bz2和linux-2.6.22.6_jz2440.patch文件拷贝到linux里/work/system下 1.2 使用 tar x
阅读全文
摘要:编译测试: 1.将写好的uboot复制到linux下面 2.make编译,然后将错误的地方修改,生成boot.bin (编译出错的解决方案:http://www.cnblogs.com/lifexy/p/7326172.html) 3.通过make生成的反汇编来查看代码是否正确 4.通过oflash
阅读全文
摘要:目标: 1 添加头文件setup.h和serial.h 2 写main函数 2.1 帮内核设置串口0, (内核启动会打印出启动信息) 2.2把内核读入到SDRAM 2.3设置参数(参考u-boot-1.1.6 /lib_arm/armlinux.C中do_bootm_linux()函数) 2.4跳转
阅读全文
摘要:目标: 第一阶段: 1.关看门狗 2.设置时钟 3.初始化SDRAM (初始化寄存器以及清除bss段) 4.重定位 (将nand/nor中代码COPY到链接地址上,需要初始化nandflash,读flash) 5.执行main 进入第二阶段: 6.写main函数,在main()中设置要传给内核的参数
阅读全文
摘要:编译出错笔记:start.s:20: Error: no such instruction: `ldr r0,=WTCON' 错误:没有这样的指令 解决:编译文件后缀名必须为大写S,改为start.S start.S:34: Error: bad instruction `ldr,r0,=0x4C0
阅读全文
摘要:adr :相对寻址,与当前位置有关 ldr :绝对寻址,与当前位置无关 在初始化SDRAM时就会用到adr,代码如下: 上面代码中第3行之所以用到了 “ adr r1,SDRAM_CONFIG ”,是因为SDRAM未初始化之前,不能使用绝对寻址,所以使用adr相对寻址. adr r1,SDRAM_C
阅读全文
摘要:MOV 1.可以寄存器与寄存器之间传递数据 2.可以常数传递到寄存器中(常数不能超过32位) LDR 1.可以地址与寄存器之间的数据传递 2.也可以常数传递到寄存器中 实例: 1.r1与r2之间传递就只能用MOV: MOV r1,r2 2.常数传递到寄存器可以使用MOV和ldr: MOV r0,#0
阅读全文
摘要:本节主要学习: 详细分析UBOOT中"bootcmd=nand read.jffs2 0x30007FC0 kernel;bootm 0x30007FC0"中怎么实现bootm命令启动内核. 其中bootm要做的事情:a 读取头部,把内核拷贝到合适的地方(0X30008000)b 在do_boom_
阅读全文
摘要:本节主要学习: 详细分析UBOOT中"bootcmd=nand read.jffs2 0x30007FC0 kernel;bootm 0x30007FC0" 怎么实现nand命令读内核. 1. nand read.jffs2 0x30007FC0 kernel 步骤a: 从NAND FILSHE中k
阅读全文
摘要:本节主要学习,run_command函数命令查找过程,命令生成过程 1.run_command函数命令查找过程分析:在u-boot界面中(main_loop();位于u-boot-1.1.6/common/main.c ):a 输入命令字符串b 将命令字符串代入函数run_command()c ru
阅读全文
摘要:仿照bootm命令生成来制作一个hello命令,功能:打印出hello,world!和参数值 1.点击New File ,创建cmd_hello.c将./common/cmd_bootm.c的头文件复制到 cmd_hello.c中(因为cmd_bootm.c的头文件都是包括的命令相关的文件): #i
阅读全文
摘要:start_armboot()分析:在start.S初始化后跳转到start_armboot实现第2阶段硬件相关的初始化(烧写擦除flash,网卡驱动,usb驱动,串口驱动,从FLASH读内核,启动内核等)然后调用main_loop();实现u-boot环境参数设置(print),读内核,启动内核等
阅读全文
摘要:分析uboot第一个执行函数_start(cpu/arm920t/start.S) 打开cpu/arm920t/start.S 在第1行中".globl _start":使用.globol声明全局符号_start,在 board/100ask24x0/u-boot.lds中ENTRY(_start)
阅读全文