联想硬盘は低砮du70安装光盘给固态硬盘装系统方法是怎样的

xp sp3 纯净安装方便吗?哪里有下载的呢?_百度知道
xp sp3 纯净安装方便吗?哪里有下载的呢?
我有更好的答案
hwjjz现在的系统下载安装都很方便的,一般没有什么特殊要求的话可以一键安装,推荐你一个下载地址上面的系统都是纯净,xp sp3 也是安装起来很方便的
采纳率:35%
an=0&si=7" target="_blank">http.baidu://zhidao.baidu.com/question/.com/question/.html<a href="http://zhidao
迅雷中有,不过要注册码的,可以在网上搜一下
首先给你注册码:MRX3F-47B9T-2487J-KWKMF-RPWBY原版镜像下载地址:我给你找了些文章,虽然很长,你仔细读过后应该会做了。用U盘启动WinPE全新安装原版XP系统--有关pe装系统刻录光驱挂掉以后,还有一个普通dvd光驱,装系统变得不那么容易了,暂时也不想买刻录光驱,研究了一下用winpe倒是一个方法,下了一个winPE制作向导,一步到位直接将u盘变成了启动盘(这其中唯一要注意的就是将u盘格式化成hdd),接着进入pe后,安装ghost的方法是很简单的,同window下一样,但是唯独安装原版系统却始终没有成功,原来原因在于--安装原版系统时,没有把u盘拔掉,结果系统安装时把安装需要的文件拷到了u盘上去,而解决方案更是简单--直接把u盘拔掉就行了(实在有点晕,但是事实就是这样)。由此可以推断,那个pe系统里提供的不少安装xp系统的选项,都是以u盘拔掉为前提的,虽然没有实验,但是8,9应该不离十吧,但是却没有提供相关的信息,这就是制作者的不是了,唉......1、在U盘启动WinPE系统后,将XP SP3系统镜像ISO文件从U盘上复制到硬盘的非系统分区后,用PE所带WinRAR程序将该ISO镜像中的I386文件夹解压到该分区的根目录下,如D:&#92;I386。
2、直接拔出U盘。原因:不拔掉的话下步的复制安装文件是复制到U盘上而不是复制到了C盘中。因PE系统实际是运行在内存中,拔出U盘不影响PE系统和程序的运行。
3、进入I386文件夹,双击运行其中的Winnt32.exe,出现XP系统安装界面。该界面与我们平时在Windows系统中重装XP系统的界面一样。 4、选择第一项;安装Windows XP,再选择“全新安装”,下一步。 5、输入XP的安装序列号,点下一步。6、这步非常关键,要点击“高级选项”,从中进行设置。下一步。 7、在“安装”选项中要选中“我想在安装过程中选择驱动器号和磁盘分区”,别的保持默认。 8、点击下一步。“获得更新的安装文件”,否,点击下一步。
9、开始向C盘复制文件。复制非常快。
10、然后安装程序提示..秒后重启系统,但那个倒计时红条充满后电脑并未重启。为此本人考虑是否在此时需点击Enter进行手动重启呢?故又从步骤第[3]项开始重新安装。直到此步,在提示重启的红条未满时立即点击Enter键,结果电脑仍未重启。 11、试着手动关机重启:此时关掉PE系统中打开的所有窗口,点击PE系统的开始菜单-关机-重启。 12、电脑重启后,直接进入了XP系统的安装界面,和用XP系统安装光盘安装操作系统时一模一样。其中也包括了向硬盘中复制安装文件这一步。 13、所有安装步骤都与光盘安装XP系统相同,完成安装后进入新的Windows xp桌面,安装驱动、自定义规则、杀软等等。 以及一篇很完善的文章: 下面的方法转自网上,仅作整理而已.超级菜鸟专用,已试绝对可行 ! 前提条件是①安装msdn源版 zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070 ②这个 原版ISO 或i386 放在U盘启动盘根目录(当U盘启动盘为多分区 时,也可放在任意分区根目录)③当然,这个U盘启动盘能运行PE(不管是量产 到U 的 PE 、还是 U+ 到U 的 PE 、还是 其它等等 到 U 的 PE… 只要能进 PE 就行), 而且还要有放得下原版ISO的容量 ==================================================================== 注 :①都在告诉我用四 的方法如何如何很简单更简单, 我说的是原版安装 ,你却非要ghost版 安装? 这跟本主题或一或 二或 三 的方法根本不是一码事 !! (ghost版 的 、集成安装版 的请飘过! ) 呵呵 ②对付未分过区的全新硬盘 ,或想重新分区的硬盘 ,选择一 的方法,在进行到第十步 时,进行分区格式化 ,完成后接着进行安装系统. =========================================================== =========================================================== 一 、PE下手动 ISO安装原版XPSP3的方法:第一步:网上下载 原版ISO ,放到 U盘启动盘根目录,如 J:&#92; 第二步:将这个U盘启动盘插入电脑USB接口,重启电脑进入PE程序第三步:用PE格式化你要安装的盘
( 开始—&我的电脑—&右键C盘—&格式化 )
第四步:用PE中的虚拟光驱加载ISO
( 开始-&程序-&VIRTUAL..-&找到并装入ISO-&确定-&最小化 ) 第五步:进装载ISO的 虚拟光驱盘符 --&双击 Setup.exe
安装程序开始运行 第六步:点击 安装Micrcsoft Windows XP
---& 下一步
第七步:①选中 全新安装
---& 下一步
②选中 我接受这个协议
---& 下一步
③输入产品密钥 MRX3F-47B9T-2487J-KWKMF-RPWBY ---& 下一步
④语言和区域(默认) 语言(中国)
⑤高级选项:勾选 从安装CD复制所有安装文件
勾选 我想在安装过程中选择安装驱器号和磁盘分区 -& 确定 / 下一步
⑥选择 否,跳过此步聚
---& 下一步
⑦选择 否,跳过这一步继续安装windows
---& 下一步
⑧选择 跳过这一步,继续安装windows
---& 下一步
开始复制安装文件到硬盘:
⑨ 正在复制安装文件 (开始复制文件到复制文件结束,即绿色进度条走完)
⑩ 正在重新启动计算机 (即红色进度条走完,会跳出一个 话框 , 千万别点
话框 中的“确定 ”按钮,不要理采它) 第八步:拔出U盘 (就是红色进度条走完了就拔掉U盘) 第九步: 手动重启电脑 (这一步千万别漏了) 第十步 :①选中 要现在安装windows XP,请按ENTER
②选中 要在所选项目上安装windows XP,请按ENTER
③选中 保持现有文件系统
经过一段较长时间(其间 有一段时间黑屏,这是正常的 )之后: 第十一步:再次进入区域和语言选项 ①自定义 (默认)
②语言信息 (默认)
---& 下一步 第十二步:输入①姓名 (随便填)
②单位 (随便填)
---& 下一步
输入①系统管理员密码 (可不填)
②确认密码
---& 下一步 第十三步:日期和时间设置 (默认)
---& 下一步 第十四步:网络设置 选中 典型设置
---& 下一步 第十五步: 工作组或计算机 ①选中 不,此计算机不在网络上或者在没有域的网络上
② 把此计算机成为下列工作组的一个成员 (默认) --& 下一步
再经过一些时间:
第十六步:显示设置
---&确认 --&确认 --&下一步 第十七步:选中 自动更新 ---& 下一步 第十八步:谁会使用这台计算机 您的姓名 (随便填一个)
--&下一步 --&完成 --&进入桌面 ==================================================================== ==================================================================== 二 、PE下自动 ISO安装原版XPSP3的方法: 第一步:.网上下载并解压winnt 文件得到winnt.sif 和winnt32 --&保存到文件名为winnt 的文件夹中 第二步:网上下载安装并运行UltraISO —& ?在左上方点击文件 —& ?打开 —& ?找到并打开存放的ISO 文件zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070 —& ??在左下方找到并打开存放的文件夹winnt —& ?将右下方窗口内的winnt32 拉至右上方窗口内的空白处 —& ???将右下方窗口内的winnt.sif 拉至右上方窗口内的I386 文件夹中—& ?在左上方点击文件 —& ?保存 第三步:把上面已集成了自动安装程序的zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070? 放入U盘启动盘根目录 第四步:将这个U盘启动盘插入电脑USB接口,重启电脑进入PE程序第五步:用PE格式化你要安装的盘(开始 —&我的电脑 —&右键C盘 —&格式化 )
用PE中的虚拟光驱加载ISO
(开始-&程序-&VIRTUAL..-&找到并装入ISO-&确定-&最小化 ) 第七步:打开装载ISO虚拟光驱盘符并运行Winnt32.bat 安装程序开始复制文件
①正在复制安装文件 (开始复制文件到复制文件结束,即绿色进度条走完)
②正在重新启动计算机 (即红色进度条走完,会跳出一个话框,千万别点话框中的“确定 ”按钮,不要理采它) 第八步:拔出U盘 (就是红色进度条走完了就拔掉U盘) 第九步: 手动重启电脑 第十步:接下来的全部自动完成(开始时有一段时间黑屏,这是正常的 ,等一下就会自动进入安装界面,直到进入Windows XPSP3操作系统桌面) ================================================================= ================================================================= 三 、提取原版ISO中的i386,PE下安装原版XPSP3的方法:第一步:网上下载并提取原版ISO中的i386 ,放到U盘启动盘根目录 ,如J:&#92;i386 第二步:网上下载并解压Winnt 把 里面的Winnt.32.bat 放 到J:&#92;
Winnt.sif 放 到J:&#92;i386 第三步:将这个U盘启动盘插入电脑USB接口,重启电脑进入PE程序 第四步:用PE格式化你要安装的盘(开始—&我的电脑—&右键C盘—&格式化)
第五步:运行J:&#92;Winnt32.bat 安装程序开始复制文件
①正在复制安装文件 (开始复制文件到复制文件结束,即绿色进度条走完)
②正在重新启动计算机 (即红色进度条走完,会跳出一个话框 ,千万别点话框 中的“确定 ”按钮,不要理采它 ) 第六步:拔出U盘(就是红色进度条走完了就拔掉U盘) 第七步:手动重启电脑 (这一步千万别漏了) 第八步:接下来的全部自动完成(开始时有一段时间黑屏,这是正常的 ,等一下就会自动进入安装界面,直到进入Windows XPSP3操作系统桌面) ==================================================== ==================================================== 四 、PE下安装ghost版 XPSP3的方法:(进PE/格盘/加载ISO/ghost/安装好了 )够快了吧 ? 1.网上下载ghost版ISO 放到U盘启动盘根目录,如J:&#92; 2.将这个U盘启动盘插入电脑USB接口,重启电脑进入PE程序 3.用PE格式化你要安装的盘 4.用PE中的虚拟光驱加载ISO 5.运行PE中的GHOST32.exe 6.Local---&Partition---&Fron Image 7.找到并打开存放ghost镜象的虚拟光驱盘符--&双击.Hgo文件 8.选中要安装系统的硬盘/分区 9.在按下最后一次回车后,拔掉U盘 ================================================================================================== 五 、 PE 下安装 集成安装版 XPSP3 的方法 : 1. 网上下载 集成安装版 ISO 放到 U 盘启动盘根目录,如 J:&#92; 2. 将这个 U 盘启动盘插入电脑 USB 接口,重启电脑进入 PE 程序 3. 用 PE 格式化你要安装的盘( 开始 —& 我的电脑 —& 右键 C 盘 —& 格式化 ) 4.用 PE 中的虚拟光驱加载 ISO
( 开始 -& 程序 -&VIRTUAL. .-& 找到并装入 ISO -& 确定 -& 最小化 )5. 打开装载 ISO 虚拟光驱盘符并运行 Setup.exe (或AUTORUN.exe )① 正在复制安装文件 (开始复制文件到复制文件结束,即绿色进度条走完) ② 正在重新启动计算机 (即红色进度条走完,会跳出一个话框,千万别点话框中的 “ 确定 ” 按钮 , 不要理采它) 6. 拔出 U 盘 (就是红色进度条走完了就拔掉 U 盘) 7 . 手动重启电脑 8 .接下来的全部自动完成,直到进入 Windows XPSP3 操作系统桌面 ============================================================================================= ============================================================================================================================ 六、PE下,还原硬盘中的ghost备份到C盘1.进PE 2.运行PE中的GHOST32.exe 3.Local---&Partition---&Fron Image4.找到ghost备份所在的硬盘/分区/文件夹--&双击.gho文件 5.选中要还原到的那个硬盘/分区 6.在按下最后一次回车后,拔掉U盘 ================================================= ================================================= 七、PE下,备份C盘系统到硬盘非系统分区 1.进PE 2.运行PE中的GHOST32.exe 3.Local---&Partition---&To Tmage 4.选中存放备份的硬盘/分区/文件夹 5.在按下最后一次回车后,拔掉U盘 6.手动重启电脑 ================================================================ ================================================================ 附上winnt32.bat
及 winnt.sif
内容 winnt32.bat(复制蓝色字 部分,粘贴到记事本 中-&另存为 -&在文件名 空栏中输入winnt32.bat -&保存 得到winnt32.bat)============================================================= .&#92;i386&#92;winnt32 /dudisable /s:.&#92;i386 /unattend:.&#92;i386&#92;winnt.sif /makelocalsource /tempdrive:c ============================================================= =============================================================================================== =========================================================================================================================================winnt.sif(复制蓝色字 部分,粘贴到记事本 中-&另存为 -&在文件名 空栏中输入winnt.sif 在文件类型 空栏中选中所有文件 -&保存 得到winnt.sif)========================================================== ; Microsoft Windows; (c) 1994 - 2001 Microsoft Corporation. 保留所有权利。 ;; 无人参与安装应答文件示例 ;; 此文件包含如何自动安装或升级 Windows 的信息,这样 ; 安装程序运行就不需要用户的输入。您可以在 ref.chm ; 中找到更多信息,该文件位于 ; CD:&#92;support&#92;tools&#92;deploy.cab;[Unattended]Unattendmode = FullUnattendedOemPreinstall = NOTargetPath = *Filesystem = LeaveAlone[GuiUnattended]; 设置时区为中国 ; 设置管理员密码为空 ; 设置 AutoLogon 为 ON 并登录 TimeZone = &210&AdminPassword = *AutoLogon = YesAutoLogonCount = 1[LicenseFilePrintData]; 用于 Server 安装 AutoMode = &PerServer&AutoUsers = &5&[GuiRunOnce]; 列出当第一次登录计算机时您想启动的程序 [Display]BitsPerPel = 16XResolution = 800YResolution = 600VRefresh = 70[Networking][Identification]JoinWorkgroup = Workgroup[UserData]FullName = & 微软用户 &OrgName = & 微软公司 &ComputerName = *ProductKey
= &MRX3F-47B9T-2487J-KWKMF-RPWBY &
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。特斯拉员工:21美元时薪低 加班多 马斯克怒怼_网易科技
特斯拉员工:21美元时薪低 加班多 马斯克怒怼
用微信扫码二维码
分享至好友和朋友圈
(原标题:特斯拉员工称21美元时薪过低、加班太多,马斯克怒怼)
本文作者:周翔导语:特斯拉生产工人的时薪在17美元到21美元之间,而美国汽车工人的平均时薪为25.58美元,工人们不得不靠加班来养活家庭。雷锋网消息:日前,一名自称在特斯拉加州Fremont工厂工作了4年的生产工人Jose Moran在Medium刊文称,由于工厂薪资过低、工作条件糟糕、而且加班太多,特斯拉工厂员工已经与全美汽车工人联合会(United Auto Workers,简称UAW)接触,准备组建工会。以下是Jose Moran发表在Medium的文章,雷锋网作了不改变原意的编译:Fremont工厂的5000多名工人每周的工作时长都大大超过40个小时,包括强制性加班,有时甚至会达到60-70小时,这种高强度的劳动对我们的身体造成了伤害。此外,一些本可以预防的伤害也时常发生。除了工作时间过长之外,工人操控的机器也常常不符合人体工程学,需要很多额外的肢体移动。而且由于缺少人力,并经常需要赶工,经常发生身体损伤。在过去的几个月,我们小组的8名成员中的6名成员都因为工伤而不得不同时休病假。据说,其他部门的情况更糟,但是大多数工人都选择保持沉默,因为他们担心会被管理者认为只会抱怨,甚至被认为不合格。特斯拉生产工人的时薪在17美元到21美元之间,而美国汽车工人的平均时薪为25.58美元,工人们不得不靠加班来养活家庭。而且,由于Fremont工厂附近的生活成本较高,工人们都住的比较远,因此每天不得不花费数个小时的时间在通勤上。长时间的加班让工人们牺牲了很多本该与家人共度的时光。目前,很多同事都在谈论成立工会,而且已经在与UAW接触,希望获得他们的支持。虽然在去年11月,特斯拉终于提高了我们的基本薪资。但是与此同时,所有员工都被要求签署保密协议,他们威胁我们,不允许我们对外界谈论特斯拉的薪资和工作条件的问题。我们必须联合起来。特斯拉面临的远不止薪资问题,工伤、士气低落、晋升不公以及高流失率等各种问题,不仅伤害了员工,还影响了产品质量和生产进度。特斯拉已经不再是一家创业公司,我希望CEO马斯克能够更好地对待他的工人。随着越来越多的同事敢于发声,我希望,我们能够就工人待遇问题进行有成效的谈判。随后,特斯拉一名发言人在声明中表示,“作为加州最大的制造业雇主,以及一家在湾区创造了数千个高质量岗位的公司,这已经不是我们第一次遭遇这种情况。在特斯拉,工人安全和工作满意度对我们来说极为重要。一直以来,我们都会与工人就他们关心的问题直接互动,未来,我们也将继续这么做,因为这才是正确的做法。”特斯拉CEO马斯克则回应称:“确实有时候会有强制性加班,但那是为了弥补此前停工造成了产量下降,但是这种加班一直在减少。”此前,特斯拉在达到生产目标时曾遭遇困难,尤其是Model X车型。他在特斯拉第二季度财报电话会议上曾表示:“我们的生产陷入了地狱。6月份我们从地狱爬了上来。”据说,当时马斯克甚至睡在Fremont工厂,亲自监督汽车的下线。在谈到特斯拉的薪资问题时,马斯克称,特斯拉的提供的起薪比UAW的工人要高,而且达到一定资历的员工还会获得额外的股票赠予。但是,他并没有指出哪些人在什么时候会获得股票补偿,也没有提及员工需要工作多少年才会有这种资格。马斯克甚至攻击Moran,称Moran实际上UWA派来的卧底,目的是为了鼓动员工成立工会。他表示:“特斯拉是加州最后一家汽车公司,因为这里的成本太高。2010年,UAW杀死了NUMMI工厂,抛弃了这里的工人。他们没有资格对我们指手划脚。”雷锋网(公众号:雷锋网)此前曾报道,特斯拉将在本月20日开始试生产Model 3的计划。同时,特斯拉位于加州的Fremont工厂中Model S/X的生产将暂停一周,以便安装用于Model 3生产的相关设备,为Model 3今年7月份的大规模量产做准备。
Model 3在预订阶段收获了约40万订单,马斯克在去年告诉投资者和Model 3的预订者们,他计划在2017年7月份开始进行量产这款车。当时,多数分析师及供应商都认为这野心太大、难以实现,并搬出之前特斯拉Model S/X跳票来说事。特斯拉的目标是在2018年将产能提高到50万辆,去年特斯拉的总产量为8.39万辆,产能爬坡挑战巨大。如果Model 3能顺利量产,将是对外界质疑的最好回应。然而此时爆出的工人不满的事件则给Model 3的量产蒙上了一层阴影。如果工人们选择罢工,那么Fremont工厂就不得不再次停工,势必会对生产进度造成影响。
本文来源:雷锋网
责任编辑:张洁_NT5630
用微信扫码二维码
分享至好友和朋友圈
加载更多新闻
热门产品:   
:        
:         
热门影院:
阅读下一篇
用微信扫描二维码
分享至好友和朋友圈Lenovo&k860i&移植Android&4.4&cm11进度记录【上篇已完结】
为了验证一下下载的CM11的源码有没有问题,决定编译一下cm官方支持的机器,手上正好有台nexus7
2012,就拿它为例测试一下在mac os x平台的整个编译过程。
最开始,是在os x下面搭编译环境,以前有说过的,详见xda这个帖子。
这个wiki里面写的是在linux下面编译n7的方法,还是比较详细的,建议先通读一下,对于在os
x下搭编译环境也是很有指导意义的。
repo sync完cm11所有的源码之后,还需要拖device的文件以及内核源码。按照官方wiki的说法,直接用breakfast
grouper它就会自动从github上面拉所有需要的东西,但实测可能是网络原因这里行不通,所以只能手动拖了,这里只需要拖n7的device部分和kernel
source部分。
从cm的官方github页面
搜索设备代号,这里就是grouper(nexus7
2012的代号),有两个结果:android_kernel_asus_grouper和android_device_asus_grouper。点进去把这两个项目git
clone下来,或者直接用页面右下方的Download ZIP下载焉。
把上面的device和kernel下载下来之后要放对位置,cd
到cm11的源码树的根目录,我这里是/Volumes/cm/cm11。
mkdir -p device/asus/grouper
mkdir -p kernel/asus/grouper
再把刚才下载的device和kernel解压并放到上面新建的两个目录里面。
就可以按照官方的编译方法envsetup.sh-&breakfast grouper-&croot-&brunch
grouper -j4编译了。
[20:22:34]&&
/Volumes/cm/cm11/out/target/product/grouper/obj/KERNEL_OBJ/Makefile
[20:22:35]&& SHIPPED
scripts/kconfig/zconf.tab.c
[20:22:35]&&
HOSTCC& scripts/kconfig/zconf.tab.o
[20:22:35] scripts/kconfig/zconf.tab.c:200:10: fatal error:
'zconf.hash.c' file not found
[20:22:35] #include "zconf.hash.c"
[20:22:35]&&&&&&&&&
[20:22:36] host StaticLib: libclangFrontendTool
(/Volumes/cm/cm11/out/host/darwin-x86/obj/STATIC_LIBRARIES/libclangFrontendTool_intermediates/libclangFrontendTool.a)
[20:22:36] 1 error generated.
[20:22:36] make[3]: *** [scripts/kconfig/zconf.tab.o] Error 1
[20:22:36] make[2]: *** [cyanogenmod_grouper_defconfig] Error
[20:22:36] make[1]: *** [sub-make] Error 2
[20:22:36] make: ***
[/Volumes/cm/cm11/out/target/product/grouper/obj/KERNEL_OBJ/.config]
[20:22:36] make: *** Waiting for unfinished jobs....
在内核目录不要自己手动用make或make
uImage编译内核,它会干扰到编译整个代码树导致报错。如果之前有这么做过,可以通过删除out/target/product/grouper/obj/KERNEL_OBJ整个文件夹,并在内核目录里面make
mrproper一下来重新clean掉内核源码目录。同时建议在内核的源码目录在brunch之前就make
mrproper一下。
上面这个错误就是由于kernel目录不干净导致的,删除out里面的KERNEL_OBJ和make
mrproper之后不再报错,并不需要像网上说的那样make clobber清掉整个out目录。
[20:08:14] /bin/sh: /bin/false: No such file or
这个看起来像是找不到/bin/false这个程序导致的,在os
x的终端里which false一下,发现位置是/usr/bin/false,这就好办,直接ln
-s一个到/bin目录即可。
ln -s /usr/bin/false /bin/false
[23:08:58] 警告: [options] 未与 -source 1.5 一起设置引导类路径
[23:09:06]
external/doclava/src/com/google/doclava/ClassInfo.java:20: 错误:
程序包com.sun.javadoc不存在
[23:09:06] import com.sun.javadoc.ClassD
[23:09:06]&&&&&&&&&&&&&&&&&&&&&&
[23:09:07]
external/doclava/src/com/google/doclava/ClassInfo.java:61: 错误:
找不到符号
[23:09:07]&& public
ClassInfo(ClassDoc cl, String rawCommentText, SourcePositionInfo
[23:09:07]&&&&&&&&&&&&&&&&&&&
[23:09:07]&&
符号:&& 类 ClassDoc
[23:09:07]&& 位置: 类
x平台编译cm的话jdk必须要有1.6版的,可以只有1.6,也可以1.6、1.7共存,但不能只有1.7,上面的报错就是因为只有jdk1.7导致的。
苹果官方在jdk6下载地址:
[00:33:30]&& Kernel:
arch/arm/boot/zImage is ready
[00:33:30]&&
UIMAGE& arch/arm/boot/uImage
[00:33:30] "mkimage" command not found - U-Boot images will not be
[00:33:30] make[3]: *** [arch/arm/boot/uImage] Error 1
[00:33:30] make[2]: *** [uImage] Error 2
[00:33:30] make[1]: *** [sub-make] Error 2
[00:33:30] make: *** [TARGET_KERNEL_BINARIES] Error 2
[00:33:30] make: *** Waiting for unfinished jobs....
找不到mkimage这个程序,去下载一个uboot的源码:。
解压,并进入,make tools -j4编译一下uboot
tools,半分钟就可以完成,在tools目录下面把mkimage拷到系统任何一个PATH目录里面即可。
或者也可以用brew安装:brew
install u-boot-tools,不过我这边没速度,于是就手动下载源码自己编译一个mkimage出来了。
整个编译过程大概需要2小时左右,配置是i5
2300,16G内存,硬盘是2.5的5400rpm,可以根据CPU性能自行判断,看到下面的最后一句,Package
Complete,就说明全部编译完成了。
[22:26:16] using
device-specific extensions in device/asus/grouper
[22:26:36] building image from target_files BOOT...
[22:26:36]&&
running:& mkbootfs -f
/var/folders/8_/kgjn7sms2mz3vn_psjgt2mlc0000gn/T/targetfiles-0EEWjX/META/boot_filesystem_config.txt
/var/folders/8_/kgjn7sms2mz3vn_psjgt2mlc0000gn/T/targetfiles-0EEWjX/BOOT/RAMDISK
[22:26:36]&&
running:& minigzip
[22:26:36]&&
running:& mkbootimg --kernel
/var/folders/8_/kgjn7sms2mz3vn_psjgt2mlc0000gn/T/targetfiles-0EEWjX/BOOT/kernel
/var/folders/8_/kgjn7sms2mz3vn_psjgt2mlc0000gn/T/tmpnm2TAe --output
/var/folders/8_/kgjn7sms2mz3vn_psjgt2mlc0000gn/T/tmpNzgBUc
[22:26:37] no bootloader.raw in target_ skipping
[22:26:37]&&
running:& openssl pkcs8 -in
build/target/product/security/testkey.pk8 -inform DER
[22:26:37]&&
running:& java -Xmx2048m -jar
/Volumes/cm/cm11/out/host/darwin-x86/framework/signapk.jar -w
build/target/product/security/testkey.x509.pem
build/target/product/security/testkey.pk8
/var/folders/8_/kgjn7sms2mz3vn_psjgt2mlc0000gn/T/tmp_RfPg5
/Volumes/cm/cm11/out/target/product/grouper/cm_grouper-ota-f0d0985f7a.zip
[22:27:08] done.
[22:27:09] Package Complete:
/Volumes/cm/cm11/out/target/product/grouper/cm-11--UNOFFICIAL-grouper.zip
--------------------------------------------------------------------------------------------
有好长一段时间没写进度日志了,期间主板又因为内存识别的问题给返修了,好在最终还是弄好了。不过起码到现在为止还是没有放弃ki的cm11,如果哪天实在是做不下去了,肯定会说明的。
最近没有什么进展,倒是弄好了一个TWRP,这个recovery功能是比较强大的,不过现在还是有点小问题,还在完善中,等到时候完善的差不多了就发出来。
折腾这么久之后发现原来在mac下面编译android需要很多要注意的地方,比如说最重要的一个就是设置
export BUILD_MAC_SDK_EXPERIMENTAL=1
这个环境变量,之前我就是在设置这个环境变量之前就开始编译,但是从来都没有Make
clobber过,所以导致了一堆错误,2号的第一个错误就是由于这个没设置才会出现,而由于我乱改了HOST_darwin-x86.mk这个makefile,这又导致了后面非常多的找不到头文件的问题。
XDA上面有一篇关于介绍在os x
10.9 mavericks配置andorid的编译环境的帖子:
按照上面的帖子配置之后,如果之前make/mka/lunch/brunch过,一定要make
clobber一下,再重新breakfast/lunch/mka/brunch。由于之前的疏忽,导致花费了大量的时间在毫无意义的地方,然后2号的进度里面的1、6、7都不会再出现错误。。。
继续错误解决方法:
[10:02:11]
bootable/recovery/minui/../../../device/lenovo/stuttgart/recovery/griphics.c:208:5:
error: conflicting types for 'gr_text'
[10:02:11] In file included from
bootable/recovery/minui/../../../device/lenovo/stuttgart/recovery/griphics.c:39:0:
[10:02:11] bootable/recovery/minui/minui.h:36:5: note: previous
declaration of 'gr_text' was here
[10:02:11] make: ***
[/Volumes/cm/cm11/out/target/product/stuttgart/obj/STATIC_LIBRARIES/libminui_intermediates/../../../device/lenovo/stuttgart/recovery/griphics.o]
[10:02:11] make: *** Waiting for unfinished jobs....
按scue的说明文件,device/lenovo/stuttgart/recovery/Readme.md,在这个recovery目录里面执行:
../overlay/bootable/recovery/bootloader.c
../../../../bootable/recovery/bootloader.c
即用device里面的overlay/bootable/recovery/bootloader.c
替换内核树中的 bootable/recovery/bootloader.c,替换之后不再报错。
不过在替换完文件之后,在修完下一个错误之后,这个错误又出现了。。。。。
仔细看了下报错信息,发现是有个重定义,打开bootable/recovery/minui/minui.h,第36行有一个函数的声明,是这样的:
int gr_text(int x, int y, const char *s, int bold);
再打开device/lenovo/stuttgart/recovery/griphics.c这个文件,第208行有这个函数:
int gr_text(int x, int y, const char *s)
声明和函数定义不一样,参数个数不一样多,于是直接把minui.h这个文件里面的函数声明注释掉,即可继续编译。
另外吐槽一下,scue貌似把文件名都拼错了,griphics.c,应该是graphics.c才对。。。。。
[17:03:04] target thumb C: recovery &=
bootable/recovery/install.c
[17:03:04] bootable/recovery/bootloader.c: In function
'get_bootloader_message_mtd':
[17:03:04] bootable/recovery/bootloader.c:77:60: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:79:43: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:85:49: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:92:60: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c: In function
'set_bootloader_message_mtd':
[17:03:04] bootable/recovery/bootloader.c:103:60: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:105:43: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:111:49: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:118:60: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:126:49: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:130:50: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:135:51: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c: In function
'get_bootloader_message_block':
[17:03:04] bootable/recovery/bootloader.c:167:22: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:168:22: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:170:49: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:176:43: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:181:53: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:185:53: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c: In function
'set_bootloader_message_block':
[17:03:04] bootable/recovery/bootloader.c:194:22: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:195:22: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:197:49: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:202:43: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:208:53: error: 'Volume'
has no member named 'device'
[17:03:04] bootable/recovery/bootloader.c:212:53: error: 'Volume'
has no member named 'device'
[17:03:04] make: ***
[/Volumes/cm/cm11/out/target/product/stuttgart/obj/EXECUTABLES/recovery_intermediates/bootloader.o]
[17:03:04] make: *** Waiting for unfinished jobs....
出错的文件是刚刚(上一个错误)从scue的device里面拷过去的bootloader.c,看了下文件,发现是变量名写错了,把上面错误涉及到的所有的变量device都改成blk_device即可继续编译。
[18:18:49] target thumb C++: libnbaio &=
frameworks/av/media/libnbaio/NBAIO.cpp
[18:18:49] frameworks/av/media/libnbaio/AudioStreamOutSink.cpp: In
member function 'virtual android::status_t
android::AudioStreamOutSink::getTimestamp(AudioTimestamp&)':
[18:18:49]
frameworks/av/media/libnbaio/AudioStreamOutSink.cpp:88:18: error:
'struct audio_stream_out' has no member named
'get_presentation_position'
[18:18:49]
frameworks/av/media/libnbaio/AudioStreamOutSink.cpp:93:23: error:
'struct audio_stream_out' has no member named
'get_presentation_position'
[18:18:49] make: ***
[/Volumes/cm/cm11/out/target/product/stuttgart/obj/SHARED_LIBRARIES/libnbaio_intermediates/AudioStreamOutSink.o]
[18:18:49] make: *** Waiting for unfinished jobs....
把88-90三行,和93-96行注释掉,即可继续编译。
这个问题看起来是和音频部分相关的,这个方法很有可能是治标不治本。
[19:30:44] target thumb C++: libaudioflinger &=
frameworks/av/services/audioflinger/Effects.cpp
[19:30:44] frameworks/av/services/audioflinger/Threads.cpp: In
member function 'void
android::AudioFlinger::PlaybackThread::readOutputParameters()':
[19:30:44] frameworks/av/services/audioflinger/Threads.cpp:1742:31:
error: 'audio_stream_out_t' has no member named
'set_callback'
[19:30:44] frameworks/av/services/audioflinger/Threads.cpp:1743:30:
error: 'audio_stream_out_t' has no member named
'set_callback'
[19:30:44] frameworks/av/services/audioflinger/Threads.cpp: In
member function 'virtual void
android::AudioFlinger::PlaybackThread::threadLoop_drain()':
[19:30:44] frameworks/av/services/audioflinger/Threads.cpp:2037:26:
error: 'audio_stream_out_t' has no member named 'drain'
[19:30:44] frameworks/av/services/audioflinger/Threads.cpp:2046:26:
error: 'audio_stream_out_t' has no member named 'drain'
[19:30:44] frameworks/av/services/audioflinger/Threads.cpp: In
member function 'android::status_t
android::AudioFlinger::PlaybackThread::getTimestamp_l(AudioTimestamp&)':
[19:30:44] frameworks/av/services/audioflinger/Threads.cpp:2582:46:
error: 'audio_stream_out_t' has no member named
'get_presentation_position'
[19:30:44] frameworks/av/services/audioflinger/Threads.cpp:2584:36:
error: 'audio_stream_out_t' has no member named
'get_presentation_position'
[19:30:44] frameworks/av/services/audioflinger/Threads.cpp: In
member function 'virtual
android::AudioFlinger::PlaybackThread::mixer_state
android::AudioFlinger::OffloadThread::prepareTracks_l(android::Vector
[19:30:44] frameworks/av/services/audioflinger/Threads.cpp:4328:26:
error: 'audio_stream_out_t' has no member named 'pause'
[19:30:44] frameworks/av/services/audioflinger/Threads.cpp:4336:26:
error: 'audio_stream_out_t' has no member named 'resume'
[19:30:44] frameworks/av/services/audioflinger/Threads.cpp: In
member function 'void
android::AudioFlinger::OffloadThread::flushHw_l()':
[19:30:44] frameworks/av/services/audioflinger/Threads.cpp:4380:22:
error: 'audio_stream_out_t' has no member named 'flush'
[19:30:44] make: ***
[/Volumes/cm/cm11/out/target/product/stuttgart/obj/SHARED_LIBRARIES/libaudioflinger_intermediates/Threads.o]
[19:30:44] make: *** Waiting for unfinished jobs....
又是一个和音频部分想着的错误,这个错误一直没有解决,至今还卡着,所以暂且先放一放。
后面准备给k860i编译一个TWRP的recovery,其实omni
rom的源码树就是自带了TWRP,所以直接把omni rom的bootable/recovery git
clone下来替换cm11的bootable/recovery就可以了。
不过编译twrp之前需要配置好device,找了下教程,大概只需要配一下device/lenovo/stuttgart/BoardConfig.mk这个就可以,貌似最简单的就只要在这文件里面加一行就可以了:
DEVICE_RESOLUTION := 720x1280
然后就是开始编译的过程:
. build/envsetup.sh
breakfast stuttgart
make -j4 recoveryimage
这个过程看机器性能需要的时间也不相同,一般编译recovery都不会出什么错。之前我在笔记本的虚拟机ubuntu里面花了1小时2分钟,后面在台机的os
x上编译,只花了26分钟就完成了,这性能差距也太大了。
不过这个recovery还有些问题,先说在ubuntu下面编译的recovery.img。这个recovery.img用fastboot
flash recovery
recovery.img刷进去之后,第一次进rec完全正常,功能也正常(当然屏幕灭了之后不能唤醒,是因为把电源键的键位定义错了,当然还没有测试过刷一个zip包)。但是奇怪的问题发生了,在rec状态下接上电脑用adb
shell进去,不能reboot,或者直接用adb
reboot也不行,但是直接在twrp里面点reboot按钮是可以重启的。最诡异的是,只要从这个rec重启了,不管是再次进rec或者是直接进系统,都是直接卡第一屏死掉了,看了下串口的内核日志,居然提示找不到内核,这也太奇怪了。后面刷了szb包的别的rec,就可以正常进系统了。暂还没明白到底是什么原因导致的,需要看一下如何解决。
x上编译的时候,虽然是通过了编译,最终也生成了recovery.img,但是却无法启动进去TWRP,看了下串口内核日志,一直提示这个找不到,无法执行当然就进不到Rec的图形界面了。
[22:59:34] [&& 20.376399] init:
cannot execve('/sbin/recovery'): Exec format error
[22:59:39] [&& 25.393742] init:
cannot execve('/sbin/recovery'): Exec format error
[22:59:44] [&& 30.410832] init:
cannot execve('/sbin/recovery'): Exec format error
[22:59:49] [&& 35.424186] init:
cannot execve('/sbin/recovery'): Exec format error
再仔细看了下os
x上编译twrp的日志,在快要编译完成的时候出现了一些错误:
[22:49:39] sed: RE error: illegal byte sequence
[22:49:39] cp -fr bootable/recovery/gui/devices/720x1280/res/*
/Volumes/cm/cm11/out/target/product/stuttgart/recovery/root/res/
[22:49:39] sed: RE error: illegal byte sequence
[22:49:39] sed: RE error: illegal byte sequence
[22:49:39] sed: RE error: illegal byte sequence
一直提示sed的RE错误,有可能是这个造成的,还需要找下原因。因为按理说在os
x和linux上编译android也好,编译recovery也好,应该都是没什么区别的,所以还是更有可能是os
x在一些文件上出了点问题,版本不对?参数不对?都有可能。
--------------------------------------------------------------------------------------------
台机又出问题了,上次是CPU都报错了,不知道是不是换回来的主板有问题,不过当然我把主板从机箱里面拆出来的时候,它又自己好了,但是更蛋疼的问题出来了,16G内存在BIOS的SPD里面能全部看到是4*4G,但是它死活只认8G,网上搜了下说这个华硕主板的通病,只认一半内存,只能去售后重新用编程器刷BIOS,因为用户自己刷的BIOS有些区域是刷不了的,也就是不彻底。看来下周又要去ASUS售后找他们好好理论理论了。
不过好在虽然台机现在裸奔了,而且只能用8G内存,但起码能正常使用了不是,所以趁着五一放假,好好来弄一下cm11的移植了。因为前面已经测试过内核能正常编译,所以现在要正式开始cm11的移植过程了。之前看过cm的官方wiki的移植的文档,大概也都看了下,肯定是料到会有很多问题出现,所以我觉得整个移植的过程就是一个个fix
error的过程,把这个error都fix完了,cm11也就编译出来了,先暂且不说能不能用,能用的前提是要能编译出来东西。之前有考虑转到ubuntu里面去做,不过个人认为os
x实在是用着很舒服,而且在xda上也有很多人成功移植kitkat,所以就更坚定了我不转到ubuntu的决心,虽然可能在os
x下面编译会有各种各样蛋碎的error。以后的进度日志的更新应该绝大多数都会是我在os
x下面编译cm11解决问题的过程和方法了。
Let's Rock'n'Roll !
X下面做编译想着的东西是一定要安装xcoda的,我这里是安装的Xcode
5.1,下载的dmg,挂载dmg后把xcode.app扔到/Application里面去。
到scue的github把他做的device文件拖下来,scue真是给k860i的机油做了很多贡献啊,简直就是造福广大机油,在此特别感谢。把scue的device文件放到device/lenovo/stuttgart里面去,我这里用的是枫大的vibe
1412的zip卡刷包作system文件,所以把这个zip解压出来,按照scue的README,把解出来的system文件夹ln
-s符号链接到device/lenovo/stuttgart/tmp/system这个地方。
build/envsetup.sh
breakfast stuttgart
./extract-files.sh
extract-files.sh会先打印proprietary-files.txt里面的内容,再从符号链接的system目录里面拉这里定义的文件,因为scue在写这个proprietary的时候ROM版本肯定是和现在的ROM的system文件夹里面的内容不一样的,所以难免有些文件不存在,所以在编译之前就要对照一下proprietary-files.txt里面的内容和符号链接过来的system文件夹里面的内容,把proprietary-files.txt里面有而符号链接的system里面没有的那些行删掉,不然到下面开始编译之后肯定会报错,提示找不到相应的rule
修改完proprietary-files.txt之后,要重新./extract-files.sh,它会把一些文件复制到
/Volumes/cm/cm11/vendor/lenovo/stuttgart/proprietary
当编译过程中遇到有错误,想完全重新编译的时候,可以把out/target/product/stuttgart这个目录删掉即可。
错误解决方法:
[19:18:14] zhufengs-iMac:cm11 zhufeng$ breakfast stuttgart
[19:18:14] including vendor/cm/vendorsetup.sh
[19:18:19] build/core/combo/HOST_darwin-x86.mk:68:
*****************************************************
[19:18:19] build/core/combo/HOST_darwin-x86.mk:69: * Can not find
SDK& at /Developer/SDKs/MacOSX.sdk
[19:18:19] build/core/combo/HOST_darwin-x86.mk:70:
*****************************************************
[19:18:19] build/core/combo/HOST_darwin-x86.mk:71: ***
Stop..& Stop.
/Volumnes/cm/cm11/build/core/combo/HOST_darwin-x86.mk
,把第62行注释掉,即:
# mac_sdk_root :=
$(mac_sdk_path)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$(mac_sdk_version).sdk
mac_sdk_version := 10.9
mac_sdk_root :=
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$(mac_sdk_version).sdk
注意这两个变量的定义顺序一定不能弄反了,要先定义mac_sdk_version再定义mac_sdk_root,不然还是会报错。
出这个错的原因是makefile找不到Xcode自带的MacOSX
10.9的SDK目录,看了下文件里面定义也没有问题,不知道怎么就是找不到,于是干脆给它定义死了,就不会再报这个错了。
[21:59:23]
/Volumes/cm/cm11/out/target/product/stuttgart/obj/APPS/SignatureTest_intermediates
[21:59:51] find: src: No such file or directory
[21:59:57]
osc_opensource/device/lenovo/stuttgart_row/multimedia/codecs/exynos_codecs/video/Android.mk:5:
osc_opensource/device/lenovo/stuttgart_row/multimedia/codecs/exynos_codecs/video/exynos4/Android.mk:
No such file or directory
[21:59:57] build/core/base_rules.mk:134: ***
osc_opensource/device/lenovo/stuttgart_row/multimedia/codecs/sec_codecs/video/exynos4/mfc:
MODULE.TARGET.STATIC_LIBRARIES.libsecmfcapi already defined by
osc_opensource/device/lenovo/stuttgart/multimedia/codecs/sec_codecs/video/exynos4/mfc.&
出现这个错误是因为我把之前联想放出来的源码解压在了cm11的代码树里面,android
build系统会扫描目录下面所有的Android.mk文件,这两个暂时是不需要的,被它扫描到了,也编译了,结果有些文件放的位置不对,所以报错。直接把osc_opensource这个目录移出cm11代码树即可。
[22:01:54] No private recovery resources for TARGET_DEVICE
[22:01:54] build/core/tasks/kernel.mk:44: *** "Please set
BOARD_KERNEL_IMAGE_NAME to uImage".&
这个错误,看了下build/core/tasks/kernel.mk,它不再推荐使用预编译好的内核,但内核已经编译好了,所以就直接用了。直接在终端里面
export BOARD_KERNEL_IMAGE_NAME=uImage 即可解决此问题。
[22:33:31] Notice file: external/zlib/NOTICE --
/Volumes/cm/cm11/out/target/product/stuttgart/obj/NOTICE_FILES/src//system/lib/libz.so.txt
[22:33:31] make: *** No rule to make target
`vendor/lenovo/stuttgart/proprietary/lib/libcamera_client.so',
`/Volumes/cm/cm11/out/target/product/stuttgart/system/lib/libcamera_client.so'.&
[22:33:31] make: *** Waiting for unfinished jobs....
这个问题就是由于上面说到的proprietary-files.txt里面定义的的文件和符号链接到的system里面的文件不匹配造成的,如果不把proprietary-files.txt里面定义了而tmp/system里面没有的项全部删掉,它还会报各种No
rule to make
target。所以只能检查proprietary-files.txt,把它里面有而tmp/system里面没有的项目全部删掉,重新招待extract-files.sh。
[01:31:59] Export includes file: external/libsepol/Android.mk --
/Volumes/cm/cm11/out/host/darwin-x86/obj/SHARED_LIBRARIES/libsepol_intermediates/export_includes
[01:31:59] make: *** No rule to make target
`device/lenovo/stuttgart/preload/preload.img', needed by
`/Volumes/cm/cm11/out/target/product/stuttgart/obj/NONE/preload_intermediates/preload.img'.&
[01:31:59] make: *** Waiting for unfinished jobs....
这个又是由于少了makefile,编译不了device/lenovo/stuttgart/preload/preload.img,这个文件是scue做的gms包和联想超级相机用的,在做cm11初期暂时可以不用管这个。看了下明明有Android.mk文件,不知道为什么就是提示找不到,既然如此,直接把Android.mk重命名成_Android.mk,让它不编译这个得了。
[02:35:00] host C: mkbootimg &=
system/core/mkbootimg/mkbootimg.c
[02:35:00] host C: libmincrypt &=
system/core/libmincrypt/dsa_sig.c
[02:35:00] host C: libmincrypt &=
system/core/libmincrypt/p256.c
[02:35:00] host C: libmincrypt &=
system/core/libmincrypt/p256_ec.c
[02:35:00] cc1: error: unrecognized command line option
[02:35:00] cc1: error: unrecognized command line option
"-Wno-nested-anon-types"
[02:35:00] make: ***
[/Volumes/cm/cm11/out/host/darwin-x86/obj/STATIC_LIBRARIES/libmincrypt_intermediates/p256.o]
[02:35:00] make: *** Waiting for unfinished jobs....
[02:35:01] cc1: error: unrecognized command line option
[02:35:01] cc1: error: unrecognized command line option
"-Wno-nested-anon-types"
[02:35:01] make: ***
[/Volumes/cm/cm11/out/host/darwin-x86/obj/STATIC_LIBRARIES/libmincrypt_intermediates/p256_ec.o]
[02:35:01] make: ***
[/Volumes/cm/cm11/out/host/darwin-x86/obj/STATIC_LIBRARIES/libmincrypt_intermediates/dsa_sig.o]
[02:35:01] make: ***
[/Volumes/cm/cm11/out/host/darwin-x86/obj/EXECUTABLES/mkbootimg_intermediates/mkbootimg.o]
这个问题困扰了我很久,网上找了很多帖子都是说要安装Apple提供的gcc,但是我都安装了Xcode了肯定自带了gcc啊,而且还有人说是只支持Xcode
4.2。google
这个识别不了的命令行选项-Wno-nested-anon-types的时候只找到了几个关于LLVM的错误修正,居然是给的补丁要重新编译LLVM,这明显不可行。
既然网上找不到方法,就只能自己解决了。分析一下,既然说这个选项不存在,那这个选项是在哪里定义的呢?肯定是在makefile里面嘛,能影响整个编译过程的的makefile有哪几个呢?第一个肯定是想到
/Volumnes/cm/cm11/build/core/combo/HOST_darwin-x86.mk
这个了,打开一看,果然,第90行是这样的:
HOST_GLOBAL_CFLAGS
+= -I$(mac_sdk_root)/usr/include/c++/4.2.1 -arch i386
-Wno-nested-anon-types -Wno-unused-parameter
果然是定义了-arch
和-Wno-nested-anon-types 这两个参数,尝试直接把它们干掉。
把上面一行复制出来,再注释掉(用作备份,如果出问题要能改回去),把那两个参数删掉,就变成了这样:
HOST_GLOBAL_CFLAGS
+= -I$(mac_sdk_root)/usr/include/c++/4.2.1&
-Wno-unused-parameter
修改过后重新编译,问题解决。
[03:02:20] host C: libhost &= build/libs/host/CopyFile.c
[03:02:20] host C: mkbootfs &= system/core/cpio/mkbootfs.c
[03:02:20] host C: checkpolicy &=
external/checkpolicy/queue.c
[03:02:20] system/core/cpio/mkbootfs.c:12:20: error: stdarg.h: No
such file or directory
[03:02:20] system/core/cpio/mkbootfs.c: In function 'die':
[03:02:20] system/core/cpio/mkbootfs.c:30: warning: implicit
declaration of function 'va_start'
居然提示找不到头文件stdarg.h,这个貌似是C标准库的里面的头文件了,自己随便写了个hello
world的c,include这个stdarg.h,没报错啊,这是为何呢?看来这个编译系统在初始化环境变量的时候可能出了点问题。根据以往的经验,但凡是找不到头文件,一般都已经包含在了cm11的内核代码树的某个文件夹里面了,比如说上次的elf.h,其实也在cm11的代码树里面有。这次这个,在代码树的根目录,用du
-a | grep stdarg.h,同样可以找到,它位于:
zhufengs-iMac:cm11
zhufeng$ du -a | grep stdarg
./external/clang/lib/Headers/stdarg.h
./external/connectivity/stlport/stlport/cstdarg
./external/connectivity/stlport/stlport/stdarg.h
./external/connectivity/stlport/stlport/stl/_cstdarg.h
第一个就是,那么找到了头文件要把它放到哪里去呢?又去
/Volumnes/cm/cm11/build/core/combo/HOST_darwin-x86.mk
这里面找了找,有如下的定义:
($(mac_sdk_version),10.9)
# HOST_GLOBAL_CFLAGS += -I$(mac_sdk_root)/usr/include/c++/4.2.1
-arch i386 -Wno-nested-anon-types -Wno-unused-parameter
HOST_GLOBAL_CFLAGS +=
-I$(mac_sdk_root)/usr/include/c++/4.2.1&
-Wno-unused-parameter
HOST_GLOBAL_LDFLAGS += -Wl,-arch,i386,-lstdc++
不错,就是刚才第6个错误的时候受影响的那一行,include目录定义的很明显了,去
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include
里面找一下,果然是没有stdarg.h这个头文件,既然这样,那把上面找到的stdarg.h弄过来就好了。直接用符号链接 ln -s
链过来,重新编译之后不再报错。
--------------------------------------------------------------------------------------------
这两天开始在os x下面尝试编译内核,cm的源码包里面提供了linux和darwin也就是os
x的交叉编译工具链,版本有4.6的4.7两个。最终编译出来的zImage再做成boot.img是可以用的,串口打印的日志如下:
[23:51:39] Starting kernel ...
[23:51:39]
[23:51:39] Uncompressing Linux... done, booting the kernel.
[23:51:41] [ 0.000000] Initializing cgroup subsys cpu
[23:51:41] [ 0.000000] Linux version 3.0.15 ()
(gcc version 4.6.x-google
(prerelease) (GCC) ) #1 SMP
PREEMPT Sat Apr 26 01:17:25 CST 2014
[23:51:41] [ 0.000000] CPU: ARMv7 Processor [413fc090] revision 0
(ARMv7), cr=10c5387d
[23:51:41] [ 0.000000] Machine: STUTTGART
[23:51:41] [ 0.000000] CPU EXYNOS4412 (id 0xe4412220)
[23:51:41] [ 0.000000] S3C24XX Clocks, Copyright 2004 Simtec
Electronics
[23:51:41] [ 0.000000] s3c_register_clksrc: clock audiocdclk has no
registers set
x下面配置好环境变量之后,直接make -j4会出现一系列问题,现一一列举出来。
[01:10:24] CC scripts/mod/empty.o
[01:10:24] HOSTCC scripts/mod/mk_elfconfig
[01:10:24] scripts/mod/mk_elfconfig.c:4:10: fatal error: 'elf.h'
file not found
[01:10:24] #include
[01:10:24] ^
[01:10:24] 1 error generated.
[01:10:24] make[2]: *** [scripts/mod/mk_elfconfig] Error 1
[01:10:24] make[1]: *** [scripts/mod] Error 2
[01:10:24] make: *** [scripts] Error 2
这个问题是由于os
x的系统include路径里面少了一个elf.h这个文件,到
这个地方,把里面的内容保存成elf.h,放到内核源码的scripts/mod/下面即可。
[01:11:49] HOSTCC scripts/mod/mk_elfconfig
[01:11:49] scripts/mod/mk_elfconfig.c:4:10: error: 'elf.h' file not
use "quotes" instead
[01:11:49] #include
[01:11:49] ^~~~~~~
[01:11:49] "elf.h"
[01:11:49] 1 error generated.
[01:11:49] make[2]: *** [scripts/mod/mk_elfconfig] Error 1
[01:11:49] make[1]: *** [scripts/mod] Error 2
[01:11:49] make[1]: *** Waiting for unfinished jobs....
这个问题是elf.h之前是因为在系统include库里面,现在放到了scripts/mod下面,编译.c文件的时候定义elf.h的时候有问题,想必会c的人都知道#include
和#include "elf.h"
的区别吧。把scripts/mod下面的mk_elfconfig.c,modpost.h这两个文件,开头前几行的#include
改成#include "elf.h"。
[03:05:36] CC
drivers/media/video/samsung/ump_r3p2/common/ump_kernel_common.o
[03:05:36] arm-eabi-gcc: error: Revision:: No such file or
[03:05:36] arm-eabi-gcc: error: Unversioned: No such file or
[03:05:36] arm-eabi-gcc: error: directory: No such file or
[03:05:36] arm-eabi-gcc: error: Revision:: No such file or
[03:05:36] arm-eabi-gcc: error: Unversioned: No such file or
[03:05:36] arm-eabi-gcc: error: directory": No such file or
[03:05:36] make[5]: ***
[drivers/media/video/samsung/ump_r3p2/common/ump_kernel_common.o]
[03:05:36] make[4]: *** [drivers/media/video/samsung/ump_r3p2]
[03:05:36] make[4]: *** Waiting for unfinished jobs....
这个就是昨天出现的问题,今天终于是把它解决了。google了一下,发现可能是由于
drivers/media/video/samsung/ump_r3p2/Makefine.common 这个文件里面定义的一个变量
SVN_REV 引起的,具体的两行代码是:
Get subversion revision number, fall back to 0000 if no svn info is
SVN_REV:=$(shell ((svnversion | grep -qv exported && echo
-n 'Revision: ' && svnversion) || git svn info | sed -e
's/$$$$/M/' |&& grep '^Revision:
' || echo ${MALI_RELEASE_NAME}) 2&/dev/null | sed -e
's/^Revision: //')
后面按照网上给的方法,把SVN_REV这一行直接给注释掉,保存之后再编译还是报一样的错。来分析一下原因,把这个变量后面的这一行命令直接分别在os
x和ubuntu的终端里面执行,看输出的结果有什么不一样。发现在linux里面是没有svnversion这个程序的,所以编译过程就会直接跳过,而os
x里面自带了这个svnversion这个程序,但是命令的输出结果并不对,有可能是Linux的程序和os
x的程序的命令行参数不太一样,输出的结果就不对,然后就引起了报错。但是有可能由于其它的makefile也引用到了svnversion这个程序,所以即使注释掉了那一个makefile,其它的还不知道有多少个Makefile引用到了这个SVN_REV的变量,所以想到干脆直接把svnversion这个东西弄掉。果然,把它重命名成svnverson-bak之后,后面的编译就很顺利,没有再报什么错了。命令如下:
[01:08:23]
zhufengs-iMac:kernel zhufeng$ sudo mv /usr/bin/svnversion
/usr/bin/svnversion-bak
因为现在的黑苹果是装在台机上的,i5
2300 + 16G的内存,所以编译直接速度真的是很快啊,日志如下:
[01:13:50]
zhufengs-iMac:kernel zhufeng$ make -j4
[01:13:52] CHK include/linux/version.h
[01:13:52] CHK include/generated/utsrelease.h
[01:17:39] AS arch/arm/boot/compressed/piggy.gzip.o
[01:17:39] LD arch/arm/boot/compressed/vmlinux
[01:17:39] OBJCOPY arch/arm/boot/zImage
[01:17:39] Kernel: arch/arm/boot/zImage is ready
从开始编译的时间和结束的时间看,编译一个k860i的内核源代码,竟然只要四分钟不到!以前在i5
一代笔记本CPU的虚拟机上,编译这个内核至少用了十多分钟,差距实在是太大了,多核真是编译东西的利器啊!
另外,在测试内核的时候还发现了一个更为严重的问题,上次说到把自编译的内核fastboot
flash boot
boot.img之后无法进入桌面,之前几天是推测说/init.rc这个文件有问题,但后面在启动的时候偶然抓了一下adb
logcat,发现一直在重复这几行:
I/SurfaceFlinger(
1356): SurfaceFlinger is starting
I/SurfaceFlinger( 1356): SurfaceFlinger's main thread ready to run.
Initializing graphics H/W...
D/libEGL ( 1356): loaded /system/lib/egl/libEGL_mali.so
D/libEGL ( 1356): loaded /system/lib/egl/libGLESv1_CM_mali.so
D/libEGL ( 1356): loaded /system/lib/egl/libGLESv2_mali.so
E/ ( 1356): ERROR in Mali driver:
E/ ( 1356): * Device driver API mismatch
E/ ( 1356): * Device driver API version: 20
E/ ( 1356): * User space API version: 17
E/ ( 1356): mali: REVISION=Linux-r3p1-01rel1 BUILD_DATE=Tue Jul 2
15:06:24 KST 2013
W/libEGL ( 1356): eglInitialize(0x1) failed
(EGL_BAD_ALLOC)
driver就是Mali驱动,只要有点主流嵌入式SOC的硬件常识都会知道,k860i用的soc是三星的Exynos
4412,它内置的显卡就是Mali
400。这正是内核显卡驱动和用户空间的驱动版本不匹配引起的,当然驱动就不能正确加载了,很明显显卡驱动都没有加载的话,内核加载完之后是肯定进不到桌面的。之所以之前没有想到是这个原因,是因为这种类型的日志不是内核日志,不可能打印在串口的内核日志输出里面,而之前测试的时候正好又没有抓adb
logcat,所以就忽略了。我估计以后正式开始cm11的时候,这个问题肯定还会再出现,现在还没有想到什么好的解决办法,网上搜了下也没有什么好的建议,到时候再看吧。
--------------------------------------------------------------------------------------------
有几天没更新进度了,其实这几天一直都在弄台式机的事情。华硕返修个主板给我返了一个多星期,起因是上次我自己不小心把CPU插座弄断了几根针,然后就杯具了。因为过保了,所以说是换插座要100块,也只能给了。不过我在去取的时候很是意外,本来是P8H67M-PRO,给我换了块P8P67M-PRO,从价格上来说是比H67要贵的,外围接口什么的也多了不少,功能应该也是会更多,但是没有了显卡输出接口,而且再加上板子也看起来是全新的,所以我也就收了,最后售后还说给我带来不便再给了三个月的保。这就得要买显卡了啊,P67不能用集显,纠结了很久,终于决定买一块索泰的GTX650,679块,这么一来整个电脑基本上全换掉了。换了主板之后,用win7自带的评分,显卡的两部分升到了7.3,7.3,现在最低的就硬盘了,5.9分,这下整一块SSD就基本上就都7.5了。好吧,这电脑又可以再战三年。。
在换了新主板之后,整了个黑苹果,其实最主要的是换了显卡的功劳,之前的i5
2300的集显hd2000在黑苹果下面驱动不起来,开不了QE/CI。基本上现在弄的黑苹果已经达到90%的完美程度了,网卡声卡显卡都驱动起来了,USB3.0接口还有点问题,AHCI和RAID的问题也解决了。本着不折腾不舒服斯基的原则,不出意外的话k860i的CM11的接下来的部分工作会在os
x上完成,就是不知道能不能进行下去。
把之前下载的CM11和内核的源码都放到os
x下面了,环境变量也都弄好了,使用cm11源码里面带的arm-eabi-gcc 4.6 for
darwin交叉编译器尝试编译内核,除去前几天出现过的smc 0的报错之外,开始出现新的错误,报错是这样的:
[03:05:36] CC
drivers/media/video/samsung/ump_r3p2/common/ump_kernel_common.o
[03:05:36] arm-eabi-gcc: error: Revision:: No such file or
[03:05:36] arm-eabi-gcc: error: Unversioned: No such file or
[03:05:36] arm-eabi-gcc: error: directory: No such file or
[03:05:36] arm-eabi-gcc: error: Revision:: No such file or
[03:05:36] arm-eabi-gcc: error: Unversioned: No such file or
[03:05:36] arm-eabi-gcc: error: directory": No such file or
[03:05:36] make[5]: ***
[drivers/media/video/samsung/ump_r3p2/common/ump_kernel_common.o]
[03:05:36] make[4]: *** [drivers/media/video/samsung/ump_r3p2]
[03:05:36] make[4]: *** Waiting for unfinished jobs....
网上搜了下这个错误可能是由于makefile和makefile.common里面的SVN_REV变量的设置问题,后面修改之后还是报一样的错,有可能是和mac里面的svn版本和linux里面版本不一样造成的。接下来的时间会继续尝试把mac平台的编译错误尽力解决掉,如果实在不行,到时候那就只能重新在台机上装一个linux了。
好吧,放一张黑苹果的截图,小得瑟一下~~
--------------------------------------------------------------------------------------------
主板终于要返修回来了,真是操蛋,用了一个多星期,而且华硕官方的售后点、居然不代理广州和深圳之外的其它区的货,这尼玛是在闹哪样,全国联保就一句空话么?下班之后去取回来,换了个CPU插座,100块,晚上还得把台机装起来。用笔记本编译实在是太慢了,台机装好之后应该会好很多,起码编译时间会减半。
在CM的wiki看了下Android的编译方法,看起来比我想象中的要复杂的多,还需要消化一下,各种变量飞来飞去,要找到些规律才能继续下去,所以这几天估计都会在看这个了。把scue的github上的cm10.1的device的代码都拖下来了,应该会有很大的用处。
--------------------------------------------------------------------------------------------
关于boot.img的内核文件不能启动的问题,google了一下,看到了这个帖子
。原来这个boot.img跟普通linux发行版本的内核文件有点不一样,它把zImage,ramdisk,启动参数等等这些东西都打包到一起去了。按照上面的那篇博客的方法,用mkbootimg和unpackbootimg可以实现打包和解包boot.img,于是准备尝试一下把自己编译的zImage打包成boot.img刷进去看看能不能用。
[00:59:35]
./unpackbootimg -i
boot.img.tj.2.9 -o out
[00:59:36] BOARD_KERNEL_CMDLINE console=ttySAC3,115200
androidboot.hardware=stuttgart
[00:59:36] BOARD_KERNEL_BASE
[00:59:36] BOARD_PAGE_SIZE 2048
[01:02:06]
*base *line *size
[01:02:06]
[01:02:06] console=ttySAC3,115200
androidboot.hardware=stuttgart
[01:02:06] 2048
[01:02:30]
../mkbootimg
--cmdline 'console=ttySAC3,115200 androidboot.hardware=stuttgart'
--kernel boot.img.tj.2.9-zImage --ramdisk
boot.img.tj.2.9-ramdisk.gz -o boot.img
先把现在用的这个ROM的boot.img解压出来,把解出来的内核文件用我自己编译的zImage替换,ramdisk和cmdline不变,再重新生成boot.img,刷到现有的ROM包里面去,终于能启动了,而不是昨天直接刷zImage直接到uboot命令行界面。不过虽然没有再卡lenovo
logo,不过却进不到桌面,看了下串口打印的内核日志,看到了下面这几行。估计就是这个原因导致的了,/init.rc-&/init.stuttgart.rc这个文件是初始化图形的配置文件,这个文件有错,自然就会出问题,这个我想只要移植过ARM开发板linux内核的人都明白,是个非常典型的错误。
[01:20:52] [
5.100215] lirx +++in tty_release, ttySAC3+++
[01:20:52] [ 5.110046] lirx +++out tty_release, ttySAC3+++
[01:20:52] [ 5.113912] init: parse config file: /init.rc
[01:20:52] [ 5.119235] init: /init.stuttgart.rc: 190: invalid
command '//'
[01:20:52] [ 5.123717] init: /init.stuttgart.rc: 191: invalid
command '//'
[01:20:52] [ 5.129590] init: /init.stuttgart.rc: 192: invalid
command '//'
[01:20:52] [ 5.135787] init (1): /proc/1/oom_adj is deprecated,
please use /proc/1/oom_score_adj instead.
后面找了群里的朋友“凌乱人生”帮忙在vibe
rom上面fastboot刷了内核做测试,终于可以进到桌面了,有图有真相,这个内核就是我自己编译的,看编译者和编译时间一眼就能看的出来。哈哈,内核暂时应该没什么问题了,不过最近一直都是在做内核测试,真正CM11的代码部分都还没开始呢,可以想象以后肯定会有越来越多各种乱七八糟的问题出来,只能慢慢来了。好吧,下午出去逛逛太古汇,连续弄了好几天了,稍微休息下,晚上回来正式开始CM11代码部分。
下午去电脑城经朋友介绍买了个二手硬盘,西数2.5寸
500G 5400转蓝盘,看通电时间1800小时,150块,价格还算可以了,几乎是新的半价,给笔记本装上,安装上了ubuntu
x64,现在就差把之前虚拟机里面代码移到硬盘上去。不过郁闷的是,虚拟机的vmdk文件在ubuntu里面无法挂载,真悲催,这样就只能重新解压源码了,但是操蛋的网络晚上又各种渣,
sync之后各种连接被重置,哎,算了,等明天把代码拖下来再继续吧。也已经连续好几天晚上两三点才睡了,今天要早点睡了,明天还要上班。
--------------------------------------------------------------------------------------------
因为台机主板还没返修回来 ,所以就只能在虚拟机里面继续编译。ubuntu 14.04
x64已经正式发布,只是那块硬盘实在已经装不上系统了,各种IO读取错误,无奈只能继续等台机主板返修回来再说了。
不过今天还是有不少的进展。下午去买了两副耳机,为了做耳机调试线,花了我二十大洋,听了之后发现这音质也就只值三四块钱。好在之前在学校的时候拿了几根杜邦线和一个USB转TTL的小板子,还没想到居然还真派上用场了。立马剪掉耳机和杜邦线,打火机烧一下,接起来,耳机那边有四根线,只需要GND和RXD,最后还是给试出来了,耳机调试线就OK了。这下这手机就跟开发一样了啊,直接打印输出串口的内核日志,看了下,内核日志确实对内核的调试是有极大的帮助的,开机直接就是启动到uboot界面,不过因为没有接TXD到TTL上面,所以在uboot界面无法按任意键停止自动加载FLASH上面的内核。
借助于耳机调试线,终于是发现为什么上次用fastboot
boot zImage刷进去的内核不能用了,这自己编译的内核是能启动的,下面放几条打印的内核日志:
[20:21:06] Starting kernel ...
[20:21:06]
[20:21:07] Uncompressing Linux... done, booting the kernel.
[20:21:08] [ 0.000000] Initializing cgroup subsys cpu
[20:21:08] [ 0.000000] Linux version 3.0.15 ()
(gcc version 4.6.x-google
(prerelease) (GCC) ) #3 SMP
PREEMPT Fri Apr 18 12:00:44 CST 2014
[20:21:08] [ 0.000000] CPU: ARMv7 Processor [413fc090] revision 0
(ARMv7), cr=10c5387d
[20:21:08] [ 0.000000] CPU: VIPT nonaliasing data cache, VIPT
aliasing instruction cache
[20:21:08] [ 0.000000] Machine: STUTTGART
[20:21:08] [ 0.000000] ####get g_lcd_nova=1#####
[20:21:08] [ 0.000000] Memory policy: ECC disabled, Data cache
writealloc
[20:21:08] [ 0.000000] CPU EXYNOS4412 (id 0xe4412220)
[20:21:08] [ 0.000000] S3C24XX Clocks, Copyright 2004 Simtec
Electronics
[20:21:12] [ 4.985941] VFS: Cannot open root device "(null)" or
unknown-block(0,0)
[20:21:12] [ 4.992053] Please append a correct "root="
here are the available partitions:
[20:21:12] [ 5.072773] b310 2048 mmcblk0boot1 (driver?)
[20:21:12] [ 5.078062] b308 2048 mmcblk0boot0 (driver?)
[20:21:12] [ 5.083352] b318
mmcblk1 driver: mmcblk
[20:21:12] [ 5.088643] b319
[20:21:12] [ 5.096118] Kernel panic - not syncing: VFS: Unable to
mount root fs on unknown-block(0,0)
这也是个典型问题了,以前在玩弄Linux内核移植的时候经常遇到这样,特别是在挂NFS
ROOT,找不到根目录。后面试了用ROM原配的boot.img也是一样,这样可能就得猜想一下fastboot
boot直接下载内核的机制到底是怎么样的了,这个就暂不深究了。
不过在测试中还发现了另外一个值得庆幸的事情,那就是k860i可以直接用fastboot来刷内核,其实好像很多手机都是可以支持的?不过确实说起来联想把这个bootloader还算是做的很好的了,电源+音量加进入bootloader模式,里面有很多个选项,可以切换耳机孔作为音频输出还是串口console,还可以选择进入recovery,或者进入usb下载(也就是fastboot模式),SD下载(也就是联想官方用的szb刷机方式)。进入usb下载模式,直接就可以用fastboot刷机了。尝试把zImage刷到boot里面去:fastboot
flash boot
zImage,再重启手机,可以看到,会报错不能引导,会直接进入到uboot的命令行,会报错。后面再刷入之前用的boot.img,就又可以正常启动了。
[20:41:55] downloading of 3749708 bytes finished
[20:41:55] Received 10 bytes: flash:boot
[20:41:55] flashing 'boot'
[20:41:55]
[20:41:57] MMC write: dev # 0, block # 6660159, count 40897 ...
40897 blocks written: OK
[20:41:57] partition 'boot' flashed
[20:42:11] Received 6 bytes: reboot
[20:42:11] resetting ...
[20:42:11] reset...
[20:42:13] s5p_dsim_set_main_disp_resol:vert_resol:1280,
hori_resol:720
[20:42:13] Hit any key to stop autoboot: 0
[20:42:13] Wrong Image Format for bootm command
[20:42:13] ERROR: can't get kernel image!
[20:43:04] STUTTGART #
看来boot.img是把zImage加了一些文件头等信息,不过也是可以理解的,毕竟boot.img是在系统的源码目录用make
bootimage生成的,而这个内核只是在内核目录生成的zImage。明天准备尝试一下把这个zImage内核文件加文件头,看能不能直接引导现用的ROM。
好吧,今天的更新日志就这些了,耳机调试线确实是个非常给力的工具,估计也能增加那么一点点移植成功的机率吧。
--------------------------------------------------------------------------------------------
从昨天晚上开始编译一下官方给的内核源码,仅仅只是做下测试看能不能编译通过。不过由于虚拟机里面的ubuntu是10.04
32位的,不能编译4.0以上的系统,所以必须重新在虚拟机里面搭一个64位的环境。本来是想直接用最新的14.04
x64,结果在vmware有各种问题,网上说是最新版的vmware不支持14.04的linux 3.13内核。后面换到12.04.4
x64,图形又用不了。真是各种操蛋,最终只能用字符界面了,好在编译这些东西不需要图形操作,还用了SecureCRT的自动记录功能,把终端所有输出的命令的时间都加上了,这样就很好了,记录所有操作,为以后记这篇日志有点根据。
好在最后还是把环境搭起来了,虚拟机里面迁移起来就比较方便了,之前拖cm的源码的时候,我是在/home下面另外新建了一块vmware虚拟硬盘vmdk挂到/home/cm的,所以我重装系统完全不会影响到源码,把几个重要的系统配置文件备份到cm的vmdk里面,比如/etc/bash.bashrc,
/etc/fstab/, /etc/profile, ~/.vim,
~/.vimrc等等,重新完成之后把这些文件再覆盖回去重启系统即可,之前设置的环境变量,各种使用习惯全部都回来了。
然后是安装编译系统和内核所必备的一些包:
sudo apt-get install bison build-essential curl flex git-core gnupg
gperf libesd0-dev libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev
libxml2 libxml2-utils lzop openjdk-6-jdk openjdk-6-jre pngcrush
schedtool squashfs-tools xsltproc zip zlib1g-dev g++-multilib
gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev
p7zip-full vim-gtk openjdk-6-jdk openjdk-6-jre
最后两个jdk和jre,最好不要安装openjdk的,看编译的时候会报一些错,安装sun
jdk比较好。
说一下我的目录环境情况,/home/cm/cm11这个是所有cm源码的根目录,下面有osc_opensource这个目录是联想4月放出来的源码的目录,现在还是一个独立的目录,还没有放到cm源码的内核目录里面去。开始测试编译内核之前要配置好交叉编译器的toolchain的环境变量,当然所有的前提都是要把cm11.0的所有源码都拖下来,repo
sync完全显示done才可以进行,此时/home/cm/cm11应该有abi bionic cts development docs
hardware Makefile out prebuilt system android bootable dalvik
等等目录,这里面同时也已经包含了交叉编译器的toolchain了。具体配置是编辑/etc/bash.bashrc,在文件最后添加如下几行保存之后,source一下/etc/bash.bashrc就可以了。
# set jdk environment
export JAVA_HOME=/usr/local/src/jdk1.6.0_24/
export PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# set PATH for adb and android sdk folder
PATH=/home/cm/:/home/cm/android-sdk-linux/tools/:/home/cm/android-sdk-linux/platform-tools/:$PATH
# set PATH for arm-linux-gcc eabi 4.6
export CM11=/home/cm/cm11
PATH=$CM11/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-
环境都搭好之后就可以cd到osc_opensource的kernel目录,开始:
make stuttgart_android_defconfig&
//用来生成.config文件
好吧,报错了。
& CC arch/arm/mach-exynos/cpu-exynos4.o
& CC arch/arm/mach-exynos/pm-exynos4.o
/tmp/cctXCN1T.s: Assembler messages:
/tmp/cctXCN1T.s:69: Error: selected processor does not support ARM
mode `smc 0'
/tmp/cctXCN1T.s:97: Error: selected processor does not support ARM
mode `smc 0'
/tmp/cctXCN1T.s:119: Error: selected processor does not support ARM
mode `smc 0'
/tmp/cctXCN1T.s:141: Error: selected processor does not support ARM
mode `smc 0'
/tmp/cctXCN1T.s:188: Error: selected processor does not support ARM
mode `smc 0'
make[1]: *** [arch/arm/mach-exynos/cpu-exynos4.o] 错误 1
make[1]: *** 正在等待未完成的任务....
/tmp/ccMpIkta.s: Assembler messages:
/tmp/ccMpIkta.s:112: Error: selected processor does not support ARM
mode `smc 0'
/tmp/ccMpIkta.s:303: Error: selected processor does not support ARM
mode `smc 0'
/tmp/ccMpIkta.s:394: Error: selected processor does not support ARM
mode `smc 0'
/tmp/ccMpIkta.s:422: Error: selected processor does not support ARM
mode `smc 0'
/tmp/ccMpIkta.s:444: Error: selected processor does not support ARM
mode `smc 0'
/tmp/ccMpIkta.s:466: Error: selected processor does not support ARM
mode `smc 0'
/tmp/ccMpIkta.s:789: Error: selected processor does not support ARM
mode `smc 0'
make[1]: *** [arch/arm/mach-exynos/pm-exynos4.o] 错误 1
make: *** [arch/arm/mach-exynos] 错误 2
make: *** 正在等待未完成的任务....
make: *** wait: 没有子进程。 停止。
反反复复都是报的同一个错,网上搜了下,说是三星Exynos的CPU的一个smc的支持问题,幸运的是,在
这个github里面,有个大神已经提交了一个修复这个错误的补丁,源代码都在,不过这个是patch.txt,好吧不会用patch功能的我只能纯手工自己添加了(请不要吐槽我不会用patch。。。。)。虽然不会用patch,不过好在这是纯文件,咱看下也能明白这个patch到底是怎么打的,怎么分析patch文件怎么用我就不说了,自己可以看源码,想想便知,现在说的是怎么手动修改。
arch/arm/mach-exynos/include/mach/smc.h
这个文件,
在第53行下面和第69行下面都加入这行代码:
".arch_extension sec\n"
arch/arm/mach-exynos/sleep-exynos4.S
这个文件,
在第41行下面加入下面这三行代码:
#ifdef CONFIG_ARM_TRUSTZONE
&.arch_extension sec
arch/arm/mach-exynos/idle-exynos4.S
这个文件 ,
在第47行下面加入下面这三行代码:
#ifdef CONFIG_ARM_TRUSTZONE
&.arch_extension sec
大概就是改这三个源文件,改好之后继续
make -j4,大概十几分钟左右,应该没有其它错误了,显示如下的信息就表示内核 zImage已经编译完成了。
& MODPOST 4 modules
& GZIP arch/arm/boot/compressed/piggy
& SHIPPED arch/arm/boot/compressed/lib1f
& AS arch/arm/boot/compressed/lib1f
& LD [M] crypto/ansi_cprng.ko
& LD [M] drivers/media/video/gspca/gspc
& AS arch/arm/boot/compressed/piggy
& LD arch/arm/boot/compressed/vmlin
& OBJCOPY arch/arm/boot/zImage
& Kernel: arch/arm/boot/zImage is ready
编译好之后当然就想试一下能不能用。因为暂时还不准备刷机,要备份的东西太多,所以我就想着看能不能直接用fastboot
boot zImage这种方式来测试下内核,发现然后就直接卡死在开机lenovo
logo了。之前以为可能是内核的问题,后面直接用现在用的这个刷机包的boot.img,用同样的fastboot boot
boot.img来启动,发现也不行,同样是卡死在lenovo logo。
调内核没有串口几乎无法进行啊,看到之前有个帖子
,准备去弄个这个线,USB转TTL的板子我自己有一个,要想办法做一个这个线,就可以跟开发板一样直接看串口输出的信息了,弄好了的话调内核就真是方便太多了。
另外,发到上海去修的主板,还没回来,估计这周都回不来了,真是操蛋。每次在笔记本的虚拟机ubuntu上编译东西,这笔记本风扇都是在嚎叫。。。。好惨的样子。。。。。
好吧,昨晚弄这个东西搞到三点钟才睡觉。。。。。
--------------------------------------------------------------------------------------------
昨天晚上给笔记本分了个LVM,以避免坏道对数据可能造成的影响。把LV做了镜像,同步时间真是漫长,干脆让它自己跑了一整晚,今早看到应该已经是完成了,lvs命令查看lv状态,copy%两个LV一个是99.99%一个是99.97%,不知道这样正不正常?按说应该要是100%完成才行的。linux的LVM好像没有aix里面LV那种查看有多少个stale的PP的命令。
在笔记本的虚拟机上面把cm11.0的所有源码和联想4月放的源码都解出来了,准备先试一下编译官方的kernel,看能不能通过。看来SOC都是ARM构架,跟以前编译的linux内核完全没有任何区别嘛。
在kernel目录里面执行:
make stuttgart_android_defconfig&
//用来生成.config文件
就可以开始编译。
不过需要说明的是,这只是在测试一下这个内核的源码编译起来有没有问题,完完全全是测试用的,即使能编译出来也是不能刷的。
编译过程中报错了,应该是虚拟机里面搭的环境有问题,看网上说是4.0以上系统编译都必须要linux
x64才行。在虚拟机里面弄个14.04
x64,结果。。。。现在的vmware还不支持14.04使用的3.13的内核,结果就是各种问题,桌面打不开,运行各种慢,halt命令关机CPU会被强制禁用。。。只能再去拖个10.04.4
x64再扔到虚拟机安装。不过很奇怪,交叉编译器toolchain不是明明写的linux-x86么。。。为何一定要64位linux呢?
/home/cm/cm11/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-gcc:
1: Syntax error: "(" unexpected
scripts/kconfig/conf --silentoldconfig Kconfig
/home/cm/cm11/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-gcc:
1: Syntax error: "(" unexpected
& CHK include/linux/version.h
& CHK include/generated/utsrelease.h
& CC scripts/mod/empty.o
/home/cm/cm11/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-gcc:
1: Syntax error: "(" unexpected
make[2]: *** [scripts/mod/empty.o] 错误 2
make[1]: *** [scripts/mod] 错误 2
make: *** [scripts] 错误 2
make: *** 正在等待未完成的任务....
--------------------------------------------------------------------------------------------
cm11.0的最新代码已经全部同步完了,大概有11g,看了下打好的tar包,repo
sync之后打的tar包比原来从网盘下载的tar包大了500多M。
3750g挂那个有坏道的移动硬盘拆出来的2.5的TOSHIBA 500G盘,测试用ubuntu 14.04
beta2做了一个LVM,48G两个分区做镜像分给/,180G两个分区做镜像分给/home,系统还没开始安装,必须要等做的镜像同步完成之后}

我要回帖

更多关于 光盘给固态硬盘装系统 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信