
嵌入式Linux移植
绿叶清风
这个作者很懒,什么都没留下…
展开
-
移植第一天
swi 1 在招行阶段,产生异常 1,SPSR = CPSR 2,修改CPSR 3,保存返回地址 4 ,PC = 0x8(异常向量表的入口)(虚拟地址) 0x0 -> 0x2000 0000 0x8 -> 0x2000 00085,执行异常程序 6,异常返回原创 2016-12-13 21:31:00 · 729 阅读 · 0 评论 -
linux应用调试之自制系统调用、编写进程查看器(一)
转自http://liu1227787871.blog.163.com/blog/static/20536319720126135157567/一、原理要想自制系统调用,当然首相要做的就是明白系统调用的过程:我们拿open函数来举个例子:当用户空间执行open函数时,会通过glibc函数库的作用最终去调用sys_open函数,sys_open函数最终又会调用我们具体转载 2017-06-11 08:20:58 · 689 阅读 · 0 评论 -
应用调试之配置修改内核打印用户态段错误信
出自http://liu1227787871.blog.163.com/blog/static/2053631972012613102341318/根据之前的调试我们知道,当应用程序出错的时候,会打印一些信息。但是有时候这些信息时不够的,那么我们能否配置内核使其输出更多的信息呢?答案是肯定的,本节我们就来详细讲一下:应用程序进入内核态调用驱动程序后,在驱动程序里面(内核态里转载 2017-06-10 22:55:01 · 1065 阅读 · 0 评论 -
linux应用调试技术之GDB和GDBServer
出自1、调试原理 GDB调试是应用程序在开发板上运行,然后在PC机上对开发板上得应用程序进行调试,PC机运行GDB,开发板上运行GDBServer。在应用程序调试的时候,pc机上的gdb向开发板上的GDBServer发出命令,而开发板上的gdbserver就会向应用程序发出信号,使应用程序停下来或者完成其他一些工作。 2、安装GDB和GDBServer(gdb转载 2017-06-10 22:44:42 · 626 阅读 · 0 评论 -
linux驱动调试之段错误分析_根据pc值确定出错的代码位置
我们知道在内核里面不能够处理指向0地址的指针,我们故意引入这样一个指针,并根据打印的出错信息来进行分析,下面是我们的程序:#include #include #include #include #include #include #include #include #include #include int *i;static i转载 2017-06-10 22:42:36 · 3682 阅读 · 0 评论 -
linux驱动调试之自制工具—寄存器编辑器
转自http://liu1227787871.blog.163.com/blog/static/2053631972012610101614610/当我们调试驱动程序的时候,可能要调整寄存器的设置。按照我们之前的作法就是直接在程序里面修改,然后重新编译程序。但是这种方法比较麻烦,我们可以编写一个工具,可以直接对寄存器进行修改,这就是我们说的寄存器编辑器。其具体程序如下:这个转载 2017-06-10 22:39:34 · 890 阅读 · 0 评论 -
linux驱动调试之修改系统时钟中断定位系统僵死问题
在first_drv.c中故意引入错误,在点灯时引入死循环,当应用程序调用write函数就会在while里面卡住。重新编译驱动,并拷贝到网络文件系统中,装载驱动并把灯点亮,但是系统卡死了。可以看测试程序的源代码,看涉及什么系统调用,找到对应的驱动程序并进行分析。在系统空间可能会发生这样一种情况:系统僵死!此时系统处于僵死状原创 2017-06-10 22:37:58 · 874 阅读 · 1 评论 -
linux应用调试之使用strace命令跟踪系统调用
starce打补丁starce命令及用法使用strace命令来追踪系统调用原创 2017-06-10 22:35:41 · 508 阅读 · 0 评论 -
linux驱动调试之段错误分析-根据栈信息分析函数调用过程
一. 根据栈信息分析函数调用过程(如果没有回溯信息)在函数调用中,一方面要执行,一方面要跳到返回地址(需要保存返回地址lr(在栈里面保存))# ./firstdrvtest onUnable to handle kernel paging request at virtual address 56000050pgd = c3e78000[56000050] *pgd=0原创 2017-06-10 22:23:06 · 862 阅读 · 0 评论 -
移植第五天(文件系统)
引导程序 Linux内核 文件系统文件系统里面包含了Linux系统能够运行所必需的应用程序,库等 /:根目录 bin:存放所有用户都可以使用的基本命令(应用程序) sbin:存放系统命令,只有管理员才能够使用。普通用户不直接使用,需要权限 usr:存放用户命令、文档等 dev:存放的是设备文件,设备文件是Linux系统特有的类型,linux系统中, 大部份的设备都是通过访问设备文件来实原创 2016-12-21 09:14:48 · 575 阅读 · 0 评论 -
移植第三天(Linux内核)
引导程序 内核,启动后,安装(挂载)文件系统, 文件系统在bootdelay秒内 有键盘输入,进入命令模式 如果没有键盘输入,进入bootcmd环境变量启动变量bootcmd:操作系统自启动命令 tftp 0x20008000 zImage\;bootm 0x20008000 theKernel(0,2456,0x20000100); bootargs告诉Linux内原创 2016-12-18 09:27:06 · 663 阅读 · 0 评论 -
移植第四天(内核配置)
Linux配置 zImage 软硬可裁剪make configmake xconfgmake oldconfigmake menuconfigcd ..../linux-2.6.35.7ls -a.config :隐藏文件,一开始没有这个文件 menu config打开配置界面ctrl + ” - “:调小屏幕 ctrl + “+” + shift:调大屏幕原创 2016-12-19 22:34:00 · 524 阅读 · 0 评论 -
移植第二天
找到链接脚本:-T u-boot.lds 链接脚本 -Text 0xce300000 链接地址u-boot.lds OUTPUT_FROMAT(“elf32-littearm”,”elf32-littearm”,”elf32-littearm”);入口文件: cpu/s5pv210/start.S u-boot第一阶段: bl lowlevel_init.S文件 //定义在l原创 2016-12-16 14:41:16 · 542 阅读 · 0 评论 -
应用调试之自制系统调用、编写进程查看器(二)
出自:点击打开链接在本节里面我们就详细来讲一下如何用我们自己实现的系统调用来调试应用程序一、步骤1、修改应用程序的可执行文件,替换某个位置的代码为swi val2、执行程序3、进入到sys_hello->在sys_hello里面打印信息->执行原来的指令->返回二、具体实现我们的应用程序是://file:test_sc.c#inclu转载 2017-06-11 15:57:19 · 727 阅读 · 0 评论