摘要: 1.object-c 怎么实现多态答:多态是在runtime里面实现的,在编译的时候,compiler把所有class的定义都存放在class 实例对象里面,class实例对象包含了class的父class 实例对象的地址,class方法的select id和地址, class变量的偏移等。所有new出来的object都是从NSObject继承过来的,所以所有对象都自动包含了一个isa的指针,这个指针在调用alloc为object分配地址的时候被指向class对象的地址,在运行的时候,我们调用class 方法是通过给object发送消息[myobj method]这样的形式,但编译器会把这句话 阅读全文
posted @ 2011-04-05 16:03 konggang 阅读(1916) 评论(0) 推荐(1)
摘要: 1.为什么perl的库有的是.pl的有的是.pm的?答:.pl是一种比较老的形式的库的形式,.pm是一种新的形式。在导入这些库的时候,.pl只能用require导入,而.pm可以用require和use两种方式导入。2.require 和use又什么区别?答:require和use的共同目的都是用来装载库的,他们有点像c语言的动态装载和静态链接之间的关系,require动态装载库,也就是在perl程序运行时才装载perl库文件,use可以理解为静态连接,也就是perl脚本在编译的时候就装载了perl库。require可以装载.pm和.pl两种库,但use只能装载.pm库。use装载.pm 的时 阅读全文
posted @ 2011-04-05 15:07 konggang 阅读(549) 评论(0) 推荐(0)
摘要: 1 阅读全文
posted @ 2011-04-05 14:39 konggang 阅读(311) 评论(0) 推荐(0)
摘要: binary格式的文件其实就是把elf格式的文件头去掉,然后把各个segment按文件头的长度要求用0补齐写到binary文件里面。 所以在加载binary文件的时候,还是要加载到elf entry 指定的地址,由于加载地址没有改变,所以binary里面的代码引用的地址也不需要改变 阅读全文
posted @ 2011-04-05 13:54 konggang 阅读(570) 评论(2) 推荐(1)
摘要: 2007/3/10 20:36:371.建立一个initramfs的 file list,2.然后linux-$(VERSION)/usr目录下的gen_init_cpio 会生成一个cpio文件,这个文件就包含了所有initramfs文件和目录层次结构.当系统启动的 时候内核执行populate_rootfs,调用unpack_to_rootfs把cpio的文件一个一个拷贝到rootfs中,3.要注意安装klibc的时候,dash/mkbuiltins开头调用mktemp有误,应改为一下代码 tempfile=tempfile if ! type tempfile > /dev/nul 阅读全文
posted @ 2011-04-05 13:54 konggang 阅读(455) 评论(0) 推荐(0)
摘要: 2007/3/10 20:33:01如果cache只有4k,和物理页一样大,那么其实进行index还是相当于用物理地址进行的.所以只有cache大于系统物理页的大小的时候才会出现cache alias,如果cache式8k,那么cache alias只可能出现在两个地方.所以,如果我们要避免cache alias,只需要保证多个virtual addr 产生的index一样就可以了. 比如,系统物理页是4k,cache是8k,那么我们只要保证虚拟地址的0到13bit一样就可以保证这么多个virtaul addr不会产生cache alias,因为他们的index都一样所以,如果我们要申请虚拟地 阅读全文
posted @ 2011-04-05 13:53 konggang 阅读(1566) 评论(0) 推荐(0)
摘要: 2007/3/10 20:15:53mips 开中断过程__asm__ (" .macro local_irq_enable \n"" .set push \n"" .set reorder \n"" .set noat \n"#ifdef CONFIG_CPU_MIPSR2" ei \n"#else" mfc0 $1,$12 \n" //取得 status寄存器的值" ori $1,0x1f \n" //现把所有的位设置为1" xori $1, 阅读全文
posted @ 2011-04-05 13:52 konggang 阅读(740) 评论(0) 推荐(0)
摘要: 2007/3/10 20:05:31mips乘法 和中断的联系: 由于 mips是precise中断机制,当有如下指令 mflo $8 mult $9, $10 如果在执行mflo的时候发生异常,由于mips是pipeline的,而且mult指令在另外一条流水线上执行,所以异常并不会终止 mult的指令,当异常执行完的时候,从新执行mflo,lo寄存器已经被mult的结果替换了,这样就破坏了precise的原则,就是指令 异常的时候,cpu的寄存器不能被破坏 解决方法是在mflo和mult之间多放几条指令,这样当mflo异常的时候,mult还没开始执行,所以重新执行mflo的时候,lo寄存器就 阅读全文
posted @ 2011-04-05 13:51 konggang 阅读(645) 评论(0) 推荐(0)
摘要: 2006/9/17 12:42:52 项目进展比较缓慢,一方面是工作比较忙,还有一个原因是我喜欢上了遛弯:),所以有几个星期没有动键盘了,很多细节都忘了:(多线程化的难度比我想象的要大,这个工作主要有两方面,1.让各个模块的代码独立开来,2.消息传递的实现.由于以前的代码就没有考虑到用多线程来实现,所以各个模块公用了大量共享变量,而且没有使用锁,目前没有什么好的办法,先把各个模块用线程跑起来,然后用锁让他们按照严格的顺序线性执行,也就是说先把多线程的模型先搭建起来,共享变量在以后慢慢加锁或去除. zhou yajin发来邮件,说他已经基本完成l4kernel在simbcm上的移植,这是一个令人 阅读全文
posted @ 2011-04-05 13:50 konggang 阅读(233) 评论(0) 推荐(0)
摘要: 新的网址是:simbcm.sourceforge.net 阅读全文
posted @ 2011-04-05 13:50 konggang 阅读(108) 评论(0) 推荐(0)
摘要: 2006/8/4 22:21:14对makefile ,autoconfig等已经无比厌烦了,想看看有没有替代工具,于是发现了SCons(http://www.scons.org/),试用了一下,感觉不错,简单易用,重要的是统一的语法,我准备用它来重新构建simbcm,感谢Steven Knight,让我又一次感觉到编写代码的快乐:) 阅读全文
posted @ 2011-04-05 13:49 konggang 阅读(257) 评论(0) 推荐(0)
摘要: 2006/8/1 23:44:37目前模拟器已经比较稳定了,我已经经常使用它来调试内核和bootloader了,使用比较顺手,但目前它的软件结构不清晰,模块化不够,很不符合我的思维习惯和 我对体系结构的理解,我决定按我自己的理解做一次大的调整, 整个模拟器的结构应该是: while(1) { cpu.run(); mem.run(); uart.run(); ...... } 把cpu,mem等芯片完全模块化,这样感觉结构会清晰很多,而且也比较符合真实机器的结构. 另外,目前cpu的模拟我觉得也需要做一些调整,感觉思路有点混乱.预计工作量不会很大,但假如修改过程中引入了bug,哪就不好估计开发 阅读全文
posted @ 2011-04-05 13:48 konggang 阅读(162) 评论(0) 推荐(0)
摘要: 2006/7/21 23:36:05目前是直接读取elf格式的cfe,然后根据elf的内容把代码和数据写到rom里面,实际上是实现了一个elf可执行文件loader,我觉得这种方式 不太符合一般嵌入式开发人员的思维习惯,我决定在初始化rom的时候,把cfe的binary文件直接拷贝到rom里面,这样就和一般的开发板很相似了.刚开始这样做的时候遇到了一点麻烦,发现cfe启动不了了,用remote gdb跟了一下,发现在env_envvars的值是0,所以在env_findenv里面跑飞了,但是实际上env_envvars是初始化了的queue_t env_envvars = {&env_ 阅读全文
posted @ 2011-04-05 13:47 konggang 阅读(587) 评论(0) 推荐(0)
摘要: 2006/7/13 22:32:03 在开发过程中,很容易遇到bootloader或kernel跑飞情况,有时候这样的bug很难抓,实在没有办法的时候,可以把指令执行的过程完全记录下来,这样便可以看到从什么地方开始出错,增加这个功能主要就是为了处理这样的情况. 比如我可以指定从某个地址(或函数)开始记录指令,到某个地址(或函数)结束,以下就是记录从启动地址开始的10条指令 1 0: PC 0xffffffffbfc00000: beq zero,zero,0xffffffffbfc005a0 2 0: PC 0xffffffffbfc00004: sll zero,zero,#0 30: PC 阅读全文
posted @ 2011-04-05 13:46 konggang 阅读(166) 评论(0) 推荐(0)
摘要: 2006/7/3 13:38:44 稍微改了一下程序,simbcm支持remote gdb 的ctrl+c了,又添加了几个调试命令,现在感觉开发起来哗哗滴,接下来准备再把cfe重新移植一遍。以前属于快速原型开发,这一轮要保证模拟的正确性和完整性,但仍然不会进行性能上的优化. 阅读全文
posted @ 2011-04-05 13:46 konggang 阅读(181) 评论(0) 推荐(0)
摘要: 006/6/27 22:54:03 这段时间工作比较忙,项目进展比较缓慢,主要是在gdb 的 remote target上增加了些命令,基本框架已经完工,剩下的工作就是逐步添加命令了,我觉得添加了这些命令以后,开发模拟器就很方便了.以前在开发模拟器的时 候,需要开两个gdb,一个cross gdb用于调试内核或bootload,另一个host gdb用于调试模拟器本身,看模拟器解释指令对不对,很麻烦,现在在cross gdb里面增加了指令以后,就可以不需要host gdb了,直接在cross gdb里面给simbcm发送消息,查看simbcm内部状态.比如,我想查看机器1的uart 控制器0的 阅读全文
posted @ 2011-04-05 13:45 konggang 阅读(221) 评论(0) 推荐(0)
摘要: 2006/5/28 9:30:46 昨天从新装了linux系统,需要从新安装开发环境,这个过程折腾了我半天时间,出了很多意想不到的问题,连我这个发起者都感觉安装复杂,那新来者呢? 所以我需要用python做一个安装程序,让开发环境的搭建简单些.KISS, 我想应该是这个项目应该遵循的一个原则. 另外,zhou yajin 提议这个项目的名称改为SimBCM,我觉得这个名字很好,以后项目的名字就是SimBCM了.通过短时间的接触,感觉zhou yajin是一个能力很强,而且执行力也很强的同学,希望这个项目在我们的共同努力下能有所作为 阅读全文
posted @ 2011-04-05 13:45 konggang 阅读(164) 评论(1) 推荐(0)
摘要: 现象: 在cfe中,当给网卡配上ip地址以后,外面可以ping -f,但系统启动以后,用initramfs中的ipconfig配上网卡后,发现不能ping通虚拟机,用tcpdump发现arp的通信是正常的,通过调试,发现在sb1250的驱动中有 len = (int)G_DMA_DSCRB_PKT_SIZE(dsc->dscr_b) - 4;在收到包的时候会把dma传过来的长度减去4,查资料发现这个是crc的长度,由于在arp处理过程中没有检查skb的长度,所以,arp的通信正常,但在 ip_rcv中检查长度了,所以包被丢弃.在网卡模拟程序中加上crc的长度,问题解决.还可以用ping 阅读全文
posted @ 2011-04-05 13:44 konggang 阅读(208) 评论(0) 推荐(0)
摘要: screen shot of new version2006/5/24 8:05:43[root@localhost app]# ./simos==================================sibyte simulator hardware configration============================SIBYTE SIM MACHINE CONFIGRATION:machine num: 1max cpus per machine: 2max ether controller per machine: 3cell mode : offprom path 阅读全文
posted @ 2011-04-05 13:43 konggang 阅读(198) 评论(0) 推荐(0)
摘要: 1.Fix some bugs, and the new version can run linux 2.6 and initramfs normally2. Clean the architecture of sibytesim, but it is not the end, the cleaning should goes further;3. Replace tcl with python, I'm satisfied with the job althoug it is not finished yet , because I need not to learn a new l 阅读全文
posted @ 2011-04-05 13:42 konggang 阅读(169) 评论(0) 推荐(0)
摘要: 2006/5/6 11:54:111. initialize cache sets and cache line size in probe_pcache()2.initialize shm_align_mask = max_t( unsigned long, c->dcache.sets * c->dcache.linesz - 1, PAGE_SIZE - 1); in r4k_cache_init() caculate the size of pcache , and minus 1, got cache mask3.let's look at how doeslin 阅读全文
posted @ 2011-04-05 13:41 konggang 阅读(315) 评论(0) 推荐(0)
摘要: 2006/4/26 19:58:30bug 暂时解决了,不过没有得到高手的认可:), 既然高手认为我的想法有问题,我还得花时间去仔细看看why does the code like this?关于此主题的全部 4 个帖子 - 树式浏览 发件人:konggangg...@163.com- 查看个人资料日期:2006年4月24日(星期一) 下午9时40分 尚未评分 显示选项 hi, guys, when I run initramfs with klibcon mips platform, myprogram always be killed , I found that it is becaus 阅读全文
posted @ 2011-04-05 13:40 konggang 阅读(250) 评论(0) 推荐(0)
摘要: 2006/4/23 22:24:46 以前只能使用shell内置的命令,执行其他命令的时候都会被kill,跟了一下,原来是因为编出来的程序的data段长度为0,所以在 elf_map的时候,返回错误,进程被杀死,于是使用了static编译的程序,shell就跑起来了,执行程序没有问题。elf_map为什么要在那里返回一个错误呢?还要好好看看代码。[root@gkong app]# ./simosCurrent ISA is MIPS@@@@ sourcing standard.tcl@@@@ standard.tcl: detailLevel=0@@@@ TargetOS = LINUXSIM 阅读全文
posted @ 2011-04-05 13:39 konggang 阅读(364) 评论(0) 推荐(0)
摘要: 2006/4/23 7:47:20在编译mips程序的时候,如果想加入调试信息,用别的格式toolchain不能识别,使用-gstabs 阅读全文
posted @ 2011-04-05 13:39 konggang 阅读(143) 评论(0) 推荐(0)
摘要: 2006/4/22 20:32:26 经过一天的调试和修改,终于可以运行shell了,顺便加了再maintance packet命令里面加了两条调试指令,这样可以很方便的从通过gdb直接调试simos的应用程序了,还修改了两个非常低级的编程错误,看来赶时间赶出来的东西质量还是不能保证啊。Current ISA is MIPS@@@@ sourcing standard.tcl@@@@ standard.tcl: detailLevel=0@@@@ TargetOS = LINUXSIMOS: pid 6654PARAM: PARAM(ETHERNET.Count) (machine 0) ha 阅读全文
posted @ 2011-04-05 13:38 konggang 阅读(288) 评论(0) 推荐(0)
摘要: 2006/4/16 21:22:27[root@gkong app]# ./simosCurrent ISA is MIPS@@@@ sourcing standard.tcl@@@@ standard.tcl: detailLevel=0@@@@ TargetOS = LINUXSIMOS: pid 13609PARAM: PARAM(ETHERNET.Count) (machine 0) has not been initialized===== SimOS Version 3.0 =====MIPSY: Turning off caches without flushing.simosb 阅读全文
posted @ 2011-04-05 13:37 konggang 阅读(391) 评论(0) 推荐(0)
摘要: 1。能精确模拟sibyte sb1250 swarm板,尽量和真实的硬件兼容,希望以后能模拟所有broadcom开发平台2。提供非常强大的调试功能,让bootloader和kernel的开发变的比较简单3.把simos以前的功能都实现 阅读全文
posted @ 2011-04-05 13:36 konggang 阅读(160) 评论(0) 推荐(0)
摘要: 在等待sf.net 注册的这段时间里面,把网卡的模拟加进去了,模拟网卡的过程很顺利,没费多大劲就调通了,感觉比较欣慰,顺便把模拟mmu的代码替换掉了,现在的代码简 单,容易调试和定位bug,等稳定以后,再优化代码吧。mmu涉及到的 东西太多了,出了问题很不好找,测试了一下新代码,还好基本没问题 :) 可是好景不长,今天在运行klibc/dash的时候,发现在format_int库里面除法溢出了,一定是哪条指令模拟的有问题。我以前为了加 快开发进度,一直没有进行完整的指令集测试,只有遇到问题以后才慢慢找bug。现在该添加的控制器都添加了,是好好测试指令的时候了,希望这个问题能尽快 解决掉。 本. 阅读全文
posted @ 2011-04-05 13:35 konggang 阅读(294) 评论(0) 推荐(0)
摘要: 这个sibyte sb1250 swarm模拟器修改自simos(http://simos.stanford.edu/),非常感谢那些大牛打下的基础.如果完全从零开始的话,何年何月我才得偿所望~~~~ sibyte-sim第一步的计划是精确模拟sibyte的sb1250 swarm 板,为大家在开发boot-loader和kernel甚至是硬件的开发提供便利.sibyte-sim是multi-cpu和multi-machine架构的,也就是可以同时模拟多台机器,每一台机器都可以是多cpu的,不过目前只实现了单台multi-cpu机器的模拟. 目前sibyte-sim只支持uart和时钟,gen 阅读全文
posted @ 2011-04-05 13:32 konggang 阅读(340) 评论(0) 推荐(0)