linux elf shell 加载执行全程

linux elf shell 加载执行全程

网上关于linux elf 执行的文章很多。但是没有看到shell的执行提示符。还真看不出问题出在那里。从load_elf_binary() elf_map()  到 do_map()  vm_link() 都没有发现描述符被更新。有哪位高手知道在那里更新了描述符      
内核就是没有执行过make_pages_present() 原因是没有VM_LOCKED标志      
终于看到一个合理的解析

make_pages_present()其实就是为每一个线性区模拟了一个缺页异常,然后再由缺页异常程序为之分配内存。若vm_flag没有带VM_LOCKED的时候,它只是为进程分配了一个可以使用的线性地址,以后要访问这个地址的时候,就会产生缺页异常。      
到这里只是空壳子。肚子里还没料。那里把*bprm->buf的binary装填进出。      
跟到最后mmu fault 函数都成了空 函数。      
据说at91可以直接运行。不防先瞧瞧有何区别。现在已经跟到__do_kernel_fault() __do_user_fault(),很快就到尾巴。      
从load_elf_binary() 建立 mm_struct 信息。通过堆栈传递参数给应用程序,这时产生mmu异常中断。do_translation_fault()被调用。这是数据段操作,不是代码段操作,便不会产生磁盘文件交换。到这里就建立了数据段堆栈段的物理内存到虚拟内存的影射。但由于操作权限受限,通过堆栈传递参数给应用程序的写入操作便产生了mmu异常中断调用do_sect_fault()设置操作权限。从load_elf_binary()完成后,代码段没有被影射,应用程序代码也是空的,但是内核控制依然去执行应用程序,显然系统要崩溃。然而事实并非如此,do_translation_fault()被调用。这是代码段操作,文件从磁盘换出,最终应用程序得以执行。      
现在又碰钉子.Segmentation fault. 网上全是客户程序造成的.可就没有shell弹出.依照本人的经验依然是kernel的某个#define问题.从shell折射到compiler-tool,直指kernel. 是因为shell的某些命令如ls,chmod.cd..等等执行正确.但是如有printf之类的终端打印.就会Segmentation fault.所以认为是kernel问题.      
楼主发错板块了