国产化实时操作系统研究之旅72-编译内核并运行在自制QEMU虚拟机
研究内核原理前需要提前对内核有个感性的认识,本文介绍笔者自己动手编译SylixOS内核并运行在自己编译的虚拟机平台上。
简介:编译SylixOS内核与Linux还有有点区别。Linux运行由Kernel与根文件系统两部分组成,SylixOS内核中集成了根文件系统,因此只需要编译出一个内核镜像即完成了操作系统最小系统运行环境。文件系统中的软件、库等都可以动态部署。
创建内核镜像步骤很简单只需要三步:
创建Base工程创建Bsp工程,Bsp工程生成内核BIN文件用flashimg工具将uboot和内核镜像BIN文件打包成虚拟nand flash存储文件,启动QEMU虚拟机运行即可创建 SylixOS Base 工程
创建BASE工程这个步骤前文有介绍,工程名Mini2440Base。
创建 SylixOS BSP 工程
IDE工程向导中创建Mini2440Bsp工程,并指定Mini2440Base所在的工程目录。
创建BSP工程
内核镜像是由BSP工程生成的。梳理下关系,BASE工程实际上是核心源码,这部分源码具有平台移植性,具体硬件平台的适配代码在BSP工程中。
BASE工程与BSP工程的目录结构
从源码目录可以看出SylixOS源码组织的思路,BASE工程中包含平台无关代码和体系结构代码;BSP工程中主要是板级适配代码。例如:我要运行开发板是MINI2440, CPU S3C2440, CPU的体系结构是ARM920T, 那么ARM920T的相关代码在BASE中,S3C2440外设驱动在BSP中。通过以上结论如果要SylixOS运行在自己的板子上,那么一般情况下只需要修改BSP工程中的文件即可。
编译 SylixOS BSP 工程
配置工程,里面主要是内存分布的配置,这个内存分布以后再研究。
配置好后直接编译,工程DEBUG目录下生成了Mini2440Bsp.bin文件,这个就是内核镜像文件。
打包nand.bin
将Mini2440Bsp.bin拷贝到我自己制作的flashimg工具下打包
./flashimg -s 128M -t nand -f nand.bin -p uboot.part -w boot,u-boot.bin -w kernel,Mini2440Bsp.bin -z 2048
nand.bin 生成的nand镜像
uboot.part flash分区表
uboot.bin uboot二进制文件
Mini2440Bsp.bin 内核镜像
启动虚拟机运行测试
sudo tunctl -u $USER -t tap0 #给QEMU设置的虚拟网卡
sudo ifconfig tap0 192.168.42.1
qemu-system-arm -M mini2440 -serial stdio -mtdblock nand.bin -usbdevice mouse -kernel uImage -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=no,downscript=no
启动QEMU后会进入uboot.bin, uboot中将内核加载进内存,具体如下:
#nand read 30000000 60000 6000000 将内核加载到内存物理地址
#go 30000000 启动内核
成功启动系统。
打破限制,兆能M2内存改造全攻略
缘起
前段时间入了台兆能m2路由器,折腾刷机后功能还是不太晚上,大部分支持256mb内存的刷机包都阉割掉了无线wifi功能,使得它只能做个有线路由用。而带无线功能的256mb内存的包又要付费,价格都顶得上我买个内存了,而且这么勉强运行我觉得应该也不会太稳定。于是乎准备自己改下内存,完善下功能。
折腾
首先来挑选内存,直接抄网上作业,大部分选择的物料512MB是D9SDD,1G是D9STQ;我找到一款便宜的——D9SHD;如你所见五块包邮。
然后将路由器拆开,可以将主板分离出来比较好操作。由于这款路由器2.4g天线是焊在板子上的,我偷懒就没有把主板拆出来,直接在路由器壳子上作业了,多在板子下面垫几张纸是没问题的。用高温胶布将周围的小元器件保护下,吹掉了的话可难得补。
颗粒间隙打点焊油均热,风枪温度调高点,风速不要太快,我用的450度风速3直吹,大概一分钟左右能吹下来。
处理下焊盘,给新颗粒重新植下球,然后趁板子还热乎的,给干上去。
把板子重新装好插电试一下,一般插电几秒钟亮双灯就没问题。
装上壳子后,插上电源,网线连接lan口,浏览器输入192.168.2.1回车,用户名默认应该是root,密码是admin;进到路由器后台,依旧是先刷过度包,点击“高级设置——升级固件”来到固件升级界面,取消勾选“保留配置”选项,要用到的文件我打包放网盘了,去dh。fengcun。top里的网盘按文章发布日期找。点击上传固件,选中名为“openwrt-ipq60xx-generic-cmiot_ax18-squashfs-nand-factory.bin”的过度包,等待上传完成,然后点击“升级”按钮。
等待路由器升级完成自动重启,浏览器输入192.168.1.1就能进到过度包的后台管理,输入密码“password”进到后台。这个时候我们看到路由器还是显示内存容量为256mb,这是因为没有刷写CDT文件的缘故,我们先来写入CDT文件,如图示,分别点击“系统——文件传输”点击“选择文件”根据自己改的内存大小选择CDT文件,比如我改的512mb就选中名为“cdt-AX18_AX18_512M.bin”的CDT文件,点击“上传”按钮。待出现图示提示就上传好了。
上传好CDT文件后,继续点击“系统——TTYD终端”,在终端里输入用户名:root;密码:password;登录终端。在终端里输入mtd write /tmp/upload/cdt-AX18_AX18_512M.bin /dev/mtd10命令回车,再输入mtd write /tmp/upload/cdt-AX18_AX18_512M.bin /dev/mtd11命令回车,看到如图示的输出就执行好了。
重启下再进入系统就能看到内存变为512mb了。
接下来来刷uboot,这里和我之前刷机的步骤就一样了,偷懒复制过来。按图示分别点击“系统——文件传输”点击“选择文件”选中名为“uboot-cmiot-ax18.bin”的uboot文件,点击“上传”按钮。待出现图示提示就上传好了。
上传好uboot文件后,继续点击“系统——TTYD终端”,在终端里输入用户名:root;密码:password;登录终端。在终端里输入mtd write /tmp/upload/uboot-cmiot-ax18.bin /dev/mtd13命令回车,看到如图示的输出就执行好了。
用牙签捅住reset键不放插电开机,看到mesh指示灯不闪了之后松开reset键,整个过程大概有个7,8秒的样子,网线连接路由器的 lan 口,刚才的过度包的ip段是192.168.1.x,一般来说不用设置静态ip也能进uboot,不行的话就给电脑设置下静态ip,如图示操作,打开网络连接界面,右击进入到连接的属性界面,双击“lnternet协议版本4(TCP/IPv4)”勾选“使用下面的IP地址(S):”把ip固定为192.168.1.X类型,注意X不能是1,然后点下子网掩码会自动填写好,网关设为192.168.1.1,然后点击两个“确定”按钮,这时候进到浏览器输入192.168.1.1就能看到我们熟悉的uboot刷机界面了。
最后上传刷机包刷机即可,一般来说改了内存后大部分包都可以刷。
总结
改了内存后这款路由器在基础功能上算是得到完善了。本来想自己添加USB的,不过以我这手残技术,补那些小的元器件还是够呛,手会抖...一通折腾后又觉得索然无味,估计使用一段时间还是会出掉找新的乐子吧。
相关问答
bsa(蓝海天使链)虚拟货币,忘记交易密码,请问怎么找回,在线急?1、插红卡进入红龙界面选backupsystemnand备份系统。2、打开第一个红鞋子图标,进系统后关机取出机身tf卡,把备份出来的nand.bin复制到电脑上保存好(万一系...
3ds godmode9怎么关闭?不要运行godmode9,decrypt9wip,emunand9这类的应用,除非你已经会使用备份nand.bin跟otp档案,这样基本应该小无敌了~不要运行godmode9,decrypt...
万利达音v9学习机好不好升级系统?-ZOL问答2、软件升级:A、双击打开V9升级烧录工具-Minios_card_burn_tool中的“USBbootTool.exe”,选择烧录CPU型号为“JZ4755”;B、分别对应选择:nand.b...
【关于nicht和keinIchbinnichtTechniker.好像在其他地方见过...[回答]ichkaufedieArmbanduhrnicht是指这个手表我不买而ichkaufekeineArmbanduhr是说我不买手表我觉得正规的话应该是Ichbinke...
为什么nfs一直挂载失败-ZOL问答staticstructs3c2410_platform_nandsmdk_nand_info={
.tacls=10,
.twrph0=30,...
nboot是从NANDflash读image到内存并执行,eboot是从以太网(用tftp)下载image到内存并执行。将nboot.nb0烧到第0块,将eboot.nb0烧到第2块。启动时nbo....