三、杂散

三、小贴士:

    几种linux内核文件的区别:

1、vmlinux/Image     编译出来的最原始的内核文件,未压缩。

2、zImage/Image.gz   是vmlinux经过gzip压缩后的文件。

3、bzImage  bz表示“big zImage”,不是用bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么采用zImage或bzImage都行,如果比较大应该用bzImage。

4、uImage   U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的tag。

5、vmlinuz  是bzImage/zImage文件的拷贝或指向bzImage/zImage的链接。

6、initrd   是“initial ramdisk”的简写。一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态;

7、kernel   android编译系统中对linux内核的通称,可以是vmlinux/Image,zImage/Image.gz其中之一;

四、常见错误处理

1.build.sh -m kernel执行出错,错误如下:

    /home/nansutech/A63_SDK/lichee/tools/pack/pctools/linux/android/mkbootimg : No such file or directory

    解决方法:进入该目录,发现文件是存在的,单独运行也提示类似的错误,后来确定是该可执行文件是32位,而系统是64位,在https://github.com/XT701/Tools下载64位应用后替换,工作正常;

2.android/ 目录下编译:make 出现错误:

    Starting build with ninja

/bin/bash: out/host/linux-x86/bin/makeparallel: No such file or directory

    解决方法:隔天,lunch选择不同的平台,问题居然解决了,out/host/linux-x86/bin/目录生成了makeparallel;

3.error:flex-2.5.39: loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))’ failed.

Aborted (core dumped)

    解决方法:参考:https://blog.csdn.net/shui1025701856/article/details/80497911,在编译脚本(android/envsetup.sh)中增加:export LC_ALL=C,不再报此错误;

4.在lichee/, ./build.sh pack 出错:

    file /home/nansutech/A63_SDK/lichee/tools/pack/out/scp.fex cant be open

    create package failed

    ERROR: dragon pack run error

    解决方法:所有命令(包括source)都用root身份执行;

   

5.在lichee/, ./build.sh pack 出错:

    packing for android

    ERROR: please specify ANDROID_IMAGE_OUT env 解决方法:在android目录执行pack即可;

五、设备打包后,没有出现预期的效果,通过adb查看设备中的内容也非预期的东西,这个时候可以通过解压img包,来确认打包的固件是否符合预期。

1.拷贝img至windows,然后用imgRePacker_206(E:A63_PDKDocuments ools_winimgRePacker_206)进行解压得到需要的各个image;

 .imgrepacker .sun50iw3p1_android_nansu_uart0.img

2.将system.fex拷贝至linux目录。然后重命名;

mv system.fex system.img

3.确认镜像是格式,之后转换为ext4格式,file system.img

    system.img: Android sparse image, version: 1.0, Total of 524288 4096-byte output blocks in 4557 input chunks.

4.利用lichee自带的simg2img工具进行格式转换;

./lichee/tools/buildroot/target/tools/host/usr/bin/simg2img system.img system.img.ext4

5.mount文件系统;

mkdir system

sudo mount -t ext4 -o loop system.img.ext4 system

6.验证完毕后,记得卸载

sudo umount system

之后进入system目录,此即对于设备运行后的/system/目录;

六、如何最小编译系统,最小升级固件来验证修改后的效果。

有的时候,修改了部分参数或者部分文件代码,想快速验证一下,这个时候根据修改的文件不同,可以进行不同的操作来达到快速验证的目的。

1.修改的是sys_config.fex文件;

    无需编译,只需执行pack操作。然后通过phonixCard.exe升级时选择“ENV”,然后进行升级即可;

2.修改的是licheelinux-3.10archarm64ootdtsxxx.dtsi文件;

    编译kernel,执行pack操作。然后通过phonixCard.exe升级时选择“ENV”,然后进行升级即可;

3.修改的是driver文件,且为非ko模块;

    编译kernel,执行pack操作,然后通过phonixCard.exe升级时选择“system”,然后进行升级即可;

4.修改的是driver文件,且为ko模块;

    编译kernel,得到xxx.ko文件;执行adb remout操作后,将该ko文件push到对应路径。

5.修改的是android文件;

   修改的android文件都可以通过编译对应模块(无需全编译),然后将对应的模块(可执行文件[脚本可以直接push,无需编译],脚本,应用程序,lib库等)push到相应目录即可。

    m/mm/mmm/mma/mmma YOUR_DIR/

    adb remout

    adb push xxx.lib /system/usrlib/

6.在.mk中删除了某个应用,此时简单的make -j 后pack,应用并没有被删除,这时候需要到out argetproducturanus-nansusystem目录找到对应的文件进行删除,如果无法得知对应的文件,可以将system*都删除,然后编译。编译也会很快完成。

七、android init.*rc文件解析:

    ASOP/system/core/init/init.c/main()–>

        init_parse_config_file(“/init.rc”);

./system/core/rootdir/init.rc

./system/core/rootdir/init.zygote64.rc

./system/core/rootdir/init.zygote64_32.rc

./system/core/rootdir/init.zygote32_64.rc

./system/core/rootdir/init.usb.rc

./device/softwinner/common/init.wireless.realtek.rc

./device/softwinner/common/init.wireless.broadcom.rc

./device/softwinner/common/init.wireless.xradio.rc

./device/softwinner/common/init.common.rc

./device/softwinner/common/init.debug.rc

./device/softwinner/uranus-t1/init.device.rc

./device/softwinner/uranus-common/init.recovery.sun50iw3p1.rc

./device/softwinner/uranus-common/init.sun50iw3p1.usb.rc

./device/softwinner/uranus-common/init.sun50iw3p1.rc

./bootable/recovery/etc/init.rc

包含,引用顺序图:

init.rc–>

    import init.environ.rc     #EXPORT global enviroment

    import init.usb.rc

    import init.${ro.hardware}.rc–>init.sun50iw3p1.rc

        import init.common.rc

        import init.device.rc–>

            import init.wireless.realtek.rc

        import init.sun50iw3p1.usb.rc

    import init.${ro.zygote}.rc–>init.zygote64.rc–>

    import init.trace.rc

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注