上次说到uboot的启动方式,最后会使用autoboot尝试引导kernel,如果失败或者被手动取消,则进入uboot的命令行。最新的uboot命令行已经发展得比较完善,很大程度上接近shell,包含了各种基本的驱动和完整的工具。这些工具的源码大多在u-boot/cmd下,查看Makefile可以看到,根据不同的配置编译出很多命令,你也可以通过搜索字符串U_BOOT_CMD(来查找这些命令的命名。这些命令的列表可以通过命令行输入help来查看,大致分成几个大类。

阅读全文 »

如今的Linux比uboot要成熟得更多,所有的模块都是可配置的。所以基本上对于kernel的移植,特别是这种已经有基础源码的项目,代码改动其实相当少,更多是时间花在调试和配置上。在所有工作中,最主要的困难恐怕就是怎么把系统跑进console了。

uImage & zImage

这个问题太基础,只是因为跟手动跑系统有关,所以稍微提一下。kernel编译后的成果是zImage,uImage只是添加了一个长度为0x40的头,用来记录给uboot的相关信息。虽然uImage是专门给uboot用的,但uboot的启动并不一定要uImage,它既可以接受uImage也可以接受zImage。可以说:uImage的头信息本质上是一种启动参数的传递形式。
制作uImage的工具是mkimage,它是来自于uboot。为了避免各种可能的版本问题,建议直接使用uboot编译后的uboot/tools/mkimage。而uImage的制作脚本则包含在kernel的编译脚本中,使用命令:
make uImage LOADADDR=0x80008000
即可编译获得uImage,前提是你已经将mkimage放入了编译环境的/bin/文件夹下。LOADADDR是kernel的启动地址(注意,这不是真正的kernel运行地址),uBoot会将kernel拷贝到此地址后(实际中也可能不拷贝)执行。关于uboot使用的几个内存地址的具体讲解也很多,这么些年也没什么变化,需要了解的可以自行去搜索。

根文件系统的制作

一个系统必须要有文件系统才能跑起来,即使是很小很小的文件系统。目前一个最基本的文件系统都是基于Busybox制作的,制作过程的教程很多也大同小异,我就不赘述了。有的厂商或者Linux系统发行商也会提供根文件系统的下载,不过大多太过冗余,需要自行裁剪。

阅读全文 »

经过这些年的演变,U-boot已经从一个简单的loader慢慢发展成了一个小小系统,硬件上原生支持各种平台、外设,软件上支持Fat&ext234等文件系统、传输协议、测试工具,可以说相当完善了。这种进化,负面影响是让整体变得更复杂臃肿,但也有更多的正面影响,是让我们的移植工作更加简单、模块化。

Uboot代码结构

代码结构是了解uboot的基础,作为一个成熟的开源软件,uboot的代码结构很清晰。绝大多数的代码都是通用的,所以在移植过程中,基本上只需要找到自己的对应平台,修改板子特有的部分即可。

阅读全文 »

启动模式

面对一块完全的空板子,首先要做的当然是让它启动起来。emmc/nand中完全没有内容,意味着没有uboot,没有命令行,所有的硬件包括内存都没有初始化,除了CPU。在上电的CPU之上,还跑了一个小小的叫做BootROM的程序。
通常每块芯片,都在硬件中包含了一个BootROM,是一个小程序,上电后自动运行,无法修改,不同的厂家有不同的设计,但都是给定几种不同的启动模式,然后循环检测。TI这块板就支持各种模式,如emmc, nand flash, network, spi, uart等。
所谓的不同启动模式,本质上也是类似的,都是从某个设备中读取很少的一点数据放到一定的地方(一般是SRAM或者STACK),然后把PC指针交给它。所以并不是支持什么启动就可以直接在设备上放操作系统了,BootROM能做的只是很基础的硬件初始化工作,更多的事情是需要Uboot来完成。

阅读全文 »

几年前,我是一个标准的原厂Linux系统开发人员,用公司自己的芯片,移植整套BSP。对于Linux系统启动方面,自认为摸得很熟了,从上电加载的汇编码到Linux内核及文件系统的配置,无一不留下了我修改的代码,细节精确到nand flash的某block某page放了什么代码,内存某个地址加载的是什么,代码某个改动是为了兼容什么project,一清二楚。所以最近接到这个移植系统的工作,信心挺足,估摸硬件没有问题的话几天之内移植就能完成,哪知道被现实结结实实打脸。
之前我用的Linux系统是2.6,Uboot版本不详但Fat32的支持还是我们自己移植进去的,可以说相当跟不上时代了。最新的Kernel早就采用了DTS,Uboot也加了很多功能和驱动,我在移植的过程中几乎完成了一次重新学习的过程。虽然我这次用的板是基于TI的,但我希望能不局限于具体的板子型号,而是把规律性的东西写出来,让后来人有个参考。

阅读全文 »

读完的书

  1. 嫌疑人X的献身
    这本书是因为看到3月31日有凯凯王和鱼蛋演的电影版上映,决定要先读一遍小说,才开始看的。之前在门口徘徊了好多次,也没有拿起过第二本的东野圭吾,这算是第一本真正的东野吧。
    这本小说比想象中短很多,原本是抱着看大片的心态,结果半集电视剧的长度就结束了……原以为渐入佳境的时候,撇了一眼进度,却是快结束了!如果说这是东野的经典之作,那么多多少少让我失望了。小说的构思和故事结构是唯一经典的地方,但其他血肉和更多细节的缺失,让我有一种在看故事梗概的感觉。也因为之前被书评剧透“看到最后才发现不是你以为的”,所以心里已经有了差不多的猜测,最终的真相大白时我的震撼也小了很多。总的来说,这是个精彩的故事,却不是本出色的小说。有点遗憾作者浪费了一个好故事,明明可以花更多的笔墨,将故事讲得更大更详细,将人物塑造得更深刻更立体。Anyway,花这点时间读到一个好故事,怎么也不算亏。

读完的杂志

  1. 中文传媒精选
  2. 名侦探柯南漫

正在读的书

  1. 蒋勋说红楼梦
  2. 《经济学人》2016必读精选-当黑天鹅坐上无人车
  3. 大脑使用指南:其实你活在大脑创造的虚拟世界中

买的正版非免费书 0.99

  1. 独裁者手册 0.99

总结

这个月公婆来了,加上我月中开始重重重感冒到卧床不起,到月底炎症还没全好利索,自然也没怎么读书。除了点杂志漫画,就读了一本小说。新买了一个Switch,玩塞尔达荒野之息玩得不亦乐乎,再加上拼图,哪有时间搞学习啊?想想大人尚且如此,小孩子贪玩也就真的没什么可说的了。

刚刚发现多说不正常,去官网看,才发现多说已经要关了……

重要通知: 多说即将关闭
多说网 发表于 3月21日
因公司业务调整,非常遗憾的向大家宣布多说项目即将关闭。 我们将于2017年6月1日正式关停服务,在此之前您可以通过后台的数据导出功能导出自己站点的评论数据。 对此给您造成的不便,我们深表歉意,感谢您的一路相伴。

感谢多说在过去日子里提供的服务,一个无法变现的项目难以为继,作为程序员我能理解。合适的新评论系统我还没有找到,国内的服务太多广告太一言难尽,国外的又太慢会被墙,不然我也不会专门在coding放个整站镜像了。所以目前的计划是所有评论暂时关闭,如果有什么想说的,欢迎发email给我交流,或者在github上留言也OK。虽然这么长时间并没有什么人留言,但还是感谢每一个关注的人。谢谢!

这些小Tips为本人近期读书笔记,收集来自网络开发者发布的技术文档,并非原创,共享的目的是为了扩散分享技术,共同进步。如有侵权不得转载等情况,请联系我告知,谢谢!

9月份出去玩了一趟又回了个国,在外面晃了快两个月,啥工作都荒废了。更别说回来以后就开始犯懒打滚不工作,一直到年前才开始整理近半年积攒下来的未读文章😛,真是工程浩大!只好拿出耐心慢慢来……

  • APP包瘦身
    1. 删除项目中没有使用的图片。 查找XCode工程中没被使用的图片资源
    2. 删除项目中没有用到的class 和 xib 及storyboard。分析工程中没有用到class
      • 安装 fui 工具:sudo gem install fui -n /usr/local/bin
      • fui usage: https://github.com/dblock/fui
      • 到工程目录下,执行 fui find 命令,可以找出所有的没有用到的class文件。
    3. 分析ipa包,找出大于500K的文件或内容 使用find . -type f -size +500000c | xargs ls -lh
  • 给代码排序:使用Spotlight来搜索Automator,并打开它;然后点击File->New,并选择服务(service)一项;在Actions筛选栏,输入shell,然后双击运行shell脚本;在新添加的服务的菜单栏上,检查Output replaces selected text;
    阅读全文 »