• 三、杂散


    三、小贴士:

        几种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

  • 相关阅读:
    1.1 What is the plug-in?
    Chapter 8 The Simplest Plug-in Solution
    Chapter 7 Resources in Plug-In(1)
    Chapter 1: Plug-in programing from past to the future
    Android插件化的兼容性(下):突破Android P中灰黑名单的限制
    Android插件化的兼容性(中):Android P的适配
    Android插件化的兼容性(上):Android O的适配
    pandas 学习 第12篇:DataFrame 避免链式赋值
    NumPy 学习 第三篇:矢量化和广播
    Wait Type 整理
  • 原文地址:https://www.cnblogs.com/fbli/p/13367061.html
Copyright © 2020-2023  润新知