Amy:IeatgoodriceRichard:Iamhandysomeboy
51CTO博客开发嵌入式技术
偶尔用Python做点事情,用的时候隔了许久,又不太记得了,有时连基本的语法都忘掉,这里记录在一张纸上,方便查看。也涵盖比较实用的内容,方便信手捻来(我没写错吧)其中代码片段主要摘自前段时间写的一些Python代码。Python Help>>> python(“subprocess”)帮助是很重要,linux程序员,你懂的Python tutorialhttps://docs.p
do_page_fault() #2: sending SIGSEGV to linux_stb for invalid read access from 00000000 (epc == 00000000, ra == 00000000) 因为缺少正确的$ra,linux gdb也无法显示调用栈。 可能的原因很多,比如该线程的内核栈被冲掉(可能性较少,因为内核栈应用层改不到)。 或者,该
很多时候,内核oops还是很好处理的,因为可以看到当时的函数调用栈。objdump -DS vmlinux,配合epc(程序指针)可以定位情况发生时的代码位置。有些调试器,支持断点地址设置,可以直接显示问题发生时的代码位置。 然而,当系统陷入某种死锁状态。又比如应用程序进行的系统调用不能退出等等。这种情况下,显示当前所有线程的当前函数调用栈就有很大的帮助作用了。 我们可以通过外部触发事件,比如
一个死锁问题,费了多天的时间。中间为了寻找通用的解决办法,整合各种知识和技巧。 最后发现仅是一个计数问题。然而找到问题根源的时候,却也莫名的舒畅。这大概是年轻时候总能对程序生活充满热情的原因之一吧,尽管这种乐趣比较初级。 30多了,还未转型,诸多原因。而对技术寻根究底的天性也是让我执著于此的原因之一吧。
记得以前学<<Linux Device Driver>>中断的章节,找了一块PCI转并口的卡,然后焊了一块小板,手动去触发中断。 最近看<<linux Kernel development>>中断的章节,已经是两年后了。因为找到了在虚拟机下调试内核的方法,所以也希望调试中断的实现可以在虚拟机下完成,而不是再去焊一块板子。 virtualbox
1. nfs验证 验证NAT模式下Guest机器是否能mount上Host机器的nfs sudo mount 192.168.1.102:/home/qianjiang/pls temp/ mount: wrong fs type, bad option, bad superblock on 192.168.1.102:/home/qianjiang/pls, &nbs
思路是,通过网络(pc的pxe特性)下载grub到虚拟机,然后下载vmlinux(实质是tftp)到虚拟机,可以调试内核. 其中的串口虚拟,主要是使得打印可以显示到主机的minicom中。 1. 虚拟串口 Go to the settings of your virtual machine, then at the "Serial Ports" and enable &
Source Insight是我曾经在windows下做开发最喜欢的工具之一,另外一个是Beyond compare. 自从用上Ubuntu后,两年来基本没有用过Source Insight了。 一直在用vim,包括安装了各种插件,还有自己也写过vim的插件,很多命令也掌握了。但是,总还是有点费心费力,不如Source Insight那么傻瓜。 所以,一直还有学习Emac的冲动,听说很简单。
问题如下: qianjiang@qianjiang-pc:~/pls/newsdk/stapisdk/apilib/src$ make ---- Building libstapi_stpti4.a ---- ---- Building build_all_linux ---- make[4]: *** No targets specified and no makefile found.
>>> Linux Kernel <<< 发现错误 cc1: error: unrecognized command line option "-ml" make带上V=1发现 gcc -Wp,-MD,kernel/.bounds.s.d -nostdinc -isystem /usr/lib/i38
Toolset 的安装参考Linux Installation即可 遇到下面的问题: 运行sh4xrun -c mediarefsim -e a.out 时,提示 sh4sim: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or di
参考Android的guide. http://source.android.com/source/initializing.html 如果你的Ubuntu是32位的操作系统,建议下载Froyo或更老的版本。如果你要编译新的版本如Ginger bread,最好先把你的系统升级到64位。 另外在安装需要的包时, sudo apt-get install git-core gnupg f
. 通过Ubuntu的Software Center安装的版本偏低,不能支持USB设备。所以要到VirtualBox的网站去下载最新的版本。 . USB的支持除了要在设置栏打开EHCI,并且设置filter外,要把自身加入到vboxuser的group中,并且重启机器和virtualbox才能生效。System->Administration->Users and Groups进行
open带上o_create和o_execl,如果打开文件时,文件存在则返回错误。 这种做法比较简单。 #include <fcntl.h> #include <stdio.h> #include <unistd.h> int main(void) { int fd; &n
经过陆陆续续的更正,现在的automount已经基本适应大多数情况。 当用户插入u盘时,调用mdev - (设置/proc/sys/kernel/hotplug),mdev根据/etc/mdev.conf调用相应的过程。 里面还存在一个防止一个程序多次被启动的方法,open(pathname, O_CREAT|O_EXCL)来实现。 另外注意fork()的子进程会随主进程退出,所以可以放到后
因为要验证板子的串口,把<<Linux Application Development>>里面的robin.c拉过来。 一边编译给pc用,一边编译给目标板用,分别运行,如: pc: ./robin -b 115200 /dev/ttyUSB0 target: ./robin-arm -b 115200 /dev/ttyS3 两边各自按键,接收OK。 linux在跨
换新的DDR之后,程序不能正常启动。 uloader的输出不确定,分析是访问c code 中 data section后出错。 所以直接在ddr初始设置后,增加下面代码验证ddr是否配置成功。 另外要注意的是,当ddr存在问题的情况下,往代码里增加数据段情况都很异常,这里面也不排除code size超出的问题。 不管怎样,下一步是调试ddr的设置使得通过下面的ddr测试。 &nb
参考上一篇文章,"基线升级---merge方法分析“ 1. 准备 bs_x --- 初始基线 bs_y --- 新基线 md_x --- 当前版本(带svn信息) 2. 获得集合A #!/bin/sh # getA # A = md_x - bs_x diff -r md_
我们基于基线1开发了一段时间,现在基线2出来了,要把开发转移到新的基线。就需要进行merge,如果处理不好,确实会带来不少麻烦。 现在分析方法如下: bs_x:基线x bs_y: 基线y md_x: 基于bs_x进行一段时间开发后的版本 集合A: md_x - bs_x, 从bs_x到md_x进行的改动集合 集合B: bs_y - bs_x, 从bs_x到bs_y进行的改动集合
如果不包括日志,只需要check out最新版本,svn export出干净的项目,然后import到新的服务器的svn. 如果需要日志,方法如下: 1. 把项目的各个版本dump出来 svnadmin dump /path/to/repository > repo_name.svn_dump 2. 在新的服务器上创建新的知识库 svnadmin create /path/
记录一下最近搞定的几个问题 issue 1: 执行nfs mount,出现Segmentation fault # /bin/mount -t nfs -o nolock,tcp,rw,nfsvers=3 192.168.4.7:/home/skyworth/workspace /mnt/ Segmentation fault # 解答:因为kernel command line中没有激
daily build实时更新项目,可以 1. 检查是否编译有问题,如果有,则自动发送邮件以便及时解决而不影响团队的工作 2. 每天都能提供最新的软件Image提供测试 3. 方便回溯,在某些衰退问题出现时,这些日常编译的Image方便我们找到衰退的版本。 实现上,主要是制定定时任务。以apollo为例,方法如下: 在/etc/crontab里面增加: 30 3 &n
make在vim中的使用和grep类似,:help make里面给了更多的细节。 下面主要是vim应用在apollo项目编译时的一些脚本。使得可以在vim中编译apollo模块,以及跳到编译出错的地方。 "------------------------------ Make commands -------------------------- let g:makedict
A. Release 的生成方法 build之后运行"package.sh create"得到,放在192.168.4.73:/home/skyworth/release/rxx下面. 包括: toolchain.tar.gz flash_bin.tar.gz rel
比如两个小组分布在两个城市,互相之间可以通过互联网通信,他们共同开发的项目文件比较大,比如所以文件加起来将近2G。 如果采用一个svn服务器,那么不在该服务器所在城市的小组,同步就非常困难。恐怕还需要购买专用的网络通道来进行。 这里要探讨的就是,每个小组都建立一个svn服务器,然后考虑如何实现同步。 1. 假定小组A已经实施了svn管理,当前版本为ra 2. 把版本ra expor
1. SW configuration management we use SVN, one of the glories of open source community, and also the best one. check out, as example to
我们发布的预编译包中的qmake生成的Makefile带有原来的目录信息, 比如qt头文件路径,链接路径等。 比如我们运行: $qmake -spec $qtpath/mkspecs/qws/linux-arm-g++ -o Makefile Nxpwin.pro 这里linux-arm-g++/qmake.conf 包含的linux.conf有行如: QMAKE_INCDIR_QT&nb
我们在看代码的时候,跳来跳去,看了后面又忘了前面。 如果能够把这个过程中的重要部分记录下来,查看起来就很清楚了。 因此我做了下面的脚本,看了就很清楚了。 " 打开草稿文件 map <silent> <leader>ss :e scrach<cr> " 把当前行内容,文件名和行号加入到草稿文件尾 map <silent>
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号