NXP AN14093 Fast Boot Falcon Mode Kernel មគ្គុទ្ទេសក៍អ្នកប្រើប្រាស់
NXP AN14093 Fast Boot Falcon Mode Kernel

សេចក្តីផ្តើម

ឯកសារនេះណែនាំពីរបៀបកាត់បន្ថយពេលវេលាចាប់ផ្ដើមសម្រាប់៖

  • គ្រួសារ i.MX 8M (i.MX 8M Mini LPDDR4 EVK, i.MX 8M Nano LPDDR4 EVK និង i.MX 8M Plus LPDDR4 EVK)
  • គ្រួសារ i.MX 9 (i.MX 93 LPDDR4 EVK) គោលបំណងនៃឯកសារនេះមានដូចខាងក្រោម៖
  • ការបង្កើនប្រសិទ្ធភាពកម្មវិធីចាប់ផ្ដើមប្រព័ន្ធ
  • ខឺណែលលីនុច និងការបង្កើនប្រសិទ្ធភាពទំហំអ្នកប្រើប្រាស់
  • ការប្រៀបធៀបរវាងលំនាំដើម និងពេលវេលាចាប់ផ្ដើមដែលប្រសើរឡើងនៅលើវេទិកាទាំងអស់។

បរិស្ថានកម្មវិធី

កុំព្យូទ័រ Ubuntu 20.04 ត្រូវបានសន្មត់។ កញ្ចប់គាំទ្រក្តារលីនុច (BSP) ចេញផ្សាយ 6.1.22_2.0.0 ត្រូវបានប្រើក្នុងដំណើរការបង្កើនប្រសិទ្ធភាព។

រូបភាព​ដែល​បាន​បង្កើត​ឡើង​ខាង​ក្រោម​ត្រូវ​បាន​ប្រើ៖

  • i.MX 8M Mini៖ imx-image-full-imx8mmevk.wic
  • i.MX 8M Nano៖ imx-image-full-imx8mnevk.wic
  • i.MX 8M Plus៖ imx-image-full-imx8mpevk.wic
  • i.MX 93៖ imx-image-full-imx93evk.wic

សរសេររូបភាពដែលបានបង្កើតជាមុននៅលើកាត SD ដោយប្រើពាក្យបញ្ជាខាងក្រោម៖
$ sudo dd if=.wic of=/dev/sd bs=1M status=progress conv=fsync

ចំណាំ៖ ពិនិត្យភាគថាសកម្មវិធីអានកាតរបស់អ្នក ហើយជំនួស sd ជាមួយនឹងភាគថាសដែលត្រូវគ្នា។

ការដំឡើងផ្នែករឹង និងឧបករណ៍

  • ការអភិវឌ្ឍន៍ កញ្ចប់ NXP i.MX 8MM EVK LPDDR4
  • ការអភិវឌ្ឍន៍ កញ្ចប់ NXP i.MX 8MN EVK LPDDR4
  • ការអភិវឌ្ឍន៍ កញ្ចប់ NXP i.MX 8MP EVK LPDDR4
  • ការអភិវឌ្ឍន៍ កញ្ចប់ NXP i.MX 93 EVK សម្រាប់ 11 × 11 mm LPDDR4
  • កាត microSD៖ SanDisk Ultra 32 GB micro secure digital high capacity (SDHC) I Class 10 ត្រូវបានប្រើសម្រាប់
    ការពិសោធន៍បច្ចុប្បន្ន
  • ខ្សែ micro-USB (i.MX 8M) ឬ Type-C (i.MX 93) សម្រាប់ច្រកបំបាត់បញ្ហា

ការពិពណ៌នាទូទៅ

ផ្នែកនេះពិពណ៌នាអំពីការបញ្ចប់view នៃការកែប្រែធម្មតាដែលទាមទារ ដើម្បីសម្រេចបានរយៈពេលចាប់ផ្ដើមខ្លីជាង។

កាត់បន្ថយពេលវេលាកម្មវិធីចាប់ផ្ដើមប្រព័ន្ធ
អ្នក​អាច​ជ្រើសរើស​យក​វិធី​ទាំងពីរ​ខាងក្រោម​នេះ​ដើម្បី​កាត់បន្ថយ​ពេល​ចាប់ផ្ដើម​កម្មវិធី​ចាប់ផ្ដើម។

  • លុបការពន្យាពេលចាប់ផ្ដើម - រក្សាទុកប្រហែលពីរវិនាទីធៀបនឹងការកំណត់លំនាំដើម ខណៈពេលដែលត្រូវការការផ្លាស់ប្តូរតិចតួចបំផុត។ វានាំឱ្យ U-Boot រំលងការរង់ចាំសម្រាប់ការចុចគ្រាប់ចុច stage កំឡុងពេលចាប់ផ្ដើម។
  • អនុវត្តរបៀប Falcon - រក្សាទុកប្រហែលបួនវិនាទីបើប្រៀបធៀបទៅនឹងការកំណត់លំនាំដើម។ វាអនុញ្ញាតឱ្យកម្មវិធីផ្ទុកកម្មវិធីទីពីរ (SPL) ដែលជាផ្នែកនៃ U-Boot ដើម្បីផ្ទុកខឺណែលដោយផ្ទាល់ ដោយរំលង U-Boot ពេញលេញ។

កាត់បន្ថយពេលវេលាចាប់ផ្ដើមខឺណែលលីនុច

  • កាត់បន្ថយសារកុងសូល - រក្សាទុកប្រហែលបីវិនាទី។ បន្ថែមស្ងាត់ទៅបន្ទាត់ពាក្យបញ្ជាខឺណែល។
  • បង្រួមខឺណែលដោយយកកម្មវិធីបញ្ជាចេញ និង fileប្រព័ន្ធ — តាមលំនាំដើម រូបភាពខឺណែលមានកម្មវិធីបញ្ជាជាច្រើន និង fileប្រព័ន្ធ (ឧទាហរណ៍៖ UBIFS) ដើម្បីបើកដំណើរការមុខងារភាគច្រើនដែលគាំទ្រសម្រាប់ក្តារ។ បញ្ជីឈ្មោះអ្នកបើកបរ និង fileប្រព័ន្ធអាចត្រូវបានកាត់តាមករណីប្រើប្រាស់របស់អ្នក។

កាត់បន្ថយពេលវេលាចាប់ផ្ដើមទំហំអ្នកប្រើប្រាស់

  • ផ្លាស់ប្តូរលំដាប់ដែលកំពុងដំណើរការនៅក្នុងការចាប់ផ្តើមស្គ្រីប Systemd — រក្សាទុកប្រហែល 600 ms ។ ចាប់ផ្តើមដំណើរការដែលចង់បានឱ្យបានឆាប់តាមដែលអាចធ្វើទៅបាន ដោយពិចារណាលើភាពអាស្រ័យរបស់វា។

ការវាស់វែង

វិសាលភាពនៃការវាស់វែងគឺនៅចន្លោះបន្ទះ POR (Power-On Reset) និងការចាប់ផ្តើមនៃដំណើរការ INIT។

ការដំឡើងដែលប្រើសម្រាប់ការវាស់វែងខាងក្រោមត្រូវបានពិពណ៌នានៅក្នុងឯកសារវិធីសាស្ត្រវាស់វែងពេលវេលាចាប់ផ្ដើម។

តារាងទី 1. ចន្លោះពេលវាស់វែង

ចំណុចពេលវេលា ចន្លោះពេលរវាងជីពចរ ទីតាំងនៃជីពចរ ប៊ូស សtages
BootROM nRST -> មុន ddr_init() ក្តារ/ខ្នាតសេរី/ /spl.c/board_init_ f() SPL យូ-ប៊ូត
ការចាប់ផ្តើម DDR មុន ddr_init() -> បន្ទាប់ពី ddr_init() ក្តារ/ខ្នាតសេរី/ /spl.c/board_init_ f()
ការចាប់ផ្ដើម SPL + ផ្ទុករូបភាព U-Boot បន្ទាប់ពី ddr_init() -> មុនពេល image_entry() common/spl/spl.c/jump_to_image_no_ args()
ការចាប់ផ្ដើម U-Boot (init_sequence_f) មុន image_entry() -> start init_ sequence_ r common/board_r.c/board_init_r() U-BOOT
ការចាប់ផ្ដើម U-Boot (init_sequence_r) ចាប់ផ្តើម init_sequence_r -> u-boot main_ loop common/main.c
លំដាប់ចាប់ផ្ដើម u-boot main_loop -> មុនពេល load_image រួមបញ្ចូល/កំណត់រចនាសម្ព័ន្ធ/ .h
ការផ្ទុករូបភាពខឺណែល មុនពេល load_image -> បន្ទាប់ពី load_image រួមបញ្ចូល/កំណត់រចនាសម្ព័ន្ធ/ .h
ចាប់ផ្ដើមខឺណែលរហូតដល់ដំណើរការ INIT បន្ទាប់ពី load_image -> /sbin/init ទទួលបានពេលវេលាបំផុត។amp កំឡុងពេលចាប់ផ្ដើម Kernel ខឺណែល

តម្រូវការជាមុន

នៅក្នុងផ្នែកនេះ កម្មវិធីដែលត្រូវការដើម្បីចងក្រង U-Boot និងខឺណែលលីនុចនៅក្នុងបរិស្ថានឯករាជ្យត្រូវបានពិពណ៌នា។

  • ដំឡើងភាពអាស្រ័យដែលត្រូវការ

ស៊េរីនៃភាពអាស្រ័យ រួមទាំង ARM64 cross-compiler ត្រូវបានទាមទារសម្រាប់ការណែនាំនេះ។
$ sudo apt ដំឡើង flex bison libssl-dev gcc-aarch64-linux-gnu u-boot-tools libncurses5-dev libncursesw5-dev uuid-dev gnutls-dev

បន្ទាប់មកទាញយកប្រភពដែលត្រូវការ។ ដាក់ពួកវាទាំងអស់នៅក្នុងថតតែមួយ។

  • ទាញយក imx-mkimage

mkimage គឺជាឧបករណ៍មួយដែលរួមបញ្ចូលគ្នានូវកម្មវិធីបង្កប់ SPL, U-Boot proper, ATF, និង DDR ទៅជារូបភាពតែមួយ ដែលបណ្តាលឱ្យរូបភាព U-Boot ត្រូវបានបញ្ចេញនៅលើកាត SD ។

$ git ក្លូន https://github.com/nxp-imx/imx-mkimage
$ cd imx-mkimage
$ git checkout lf-6.1.22-2.0.0

  • ទាញយក ATF

$ git ក្លូន https://github.com/nxp-imx/imx-atf
$ cd imx-atf
$ git checkout lf-6.1.22-2.0.0

  • ទាញយក U-Boot

$ git ក្លូន https://github.com/nxp-imx/uboot-imx
$ cd uboot-imx
$ git checkout lf-6.1.22-2.0.0

  • ទាញយកខឺណែលលីនុច

$ git ក្លូន https://github.com/nxp-imx/linux-imx
$ cd linux-imx
$ git checkout lf-6.1.22-2.0.0

  • ទាញយកកម្មវិធីបង្កប់អត្រាទិន្នន័យទ្វេដង (DDR)

$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.20.bin
$ chmod +x កម្មវិធីបង្កប់-imx-8.20.bin
$ ./firmware-imx-8.20.bin

  • [សម្រាប់តែ i.MX 93] ទាញយកកម្មវិធីបង្កប់ EdgeLock Secure Enclave (ELE)

$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-sentinel-0.9.bin
$ chmod +x firmware-sentinel-0.9.bin
$ ./firmware-sentinel-0.9.bin

បង្កើតរូបភាព

ជាជម្រើស ដើម្បីពិនិត្យមើលថាតើប្រភព និងតម្រូវការជាមុនត្រូវបានទាញយកត្រឹមត្រូវឬអត់ សូមអនុវត្តជំហានខាងក្រោម។ បើមិនដូច្នោះទេ សូមរំលងឥឡូវនេះ ហើយអនុវត្ត ផ្នែកទី 7 "ការបង្កើនប្រសិទ្ធភាពកម្មវិធីចាប់ផ្ដើមប្រព័ន្ធ" និងផ្នែកទី 8 "ការបង្កើនប្រសិទ្ធភាពចន្លោះខឺណែល" ។

បង្កើតកម្មវិធីបង្កប់ដែលជឿទុកចិត្តលើដៃ

$ CROSS_COMPILE=aarch64-linux-gnu- make PLAT= bl31 កន្លែងណាអាចមានតម្លៃដូចខាងក្រោម៖ imx8mn, imx8mm, imx8mp, ឬ imx93។
ប្រព័ន្ធគោលពីរដែលបានបង្កើតមានទីតាំងនៅក្នុង build//release/ directory។

បង្កើត U-Boot

  1.  ចម្លង bl31.bin ពី ATF (build//release/) ទៅ imx-mkimage//
  2. ចម្លង lpddr4* ទាំងអស់ files ពីកម្មវិធីបង្កប់/ddr/synopsys/ នៃកញ្ចប់កម្មវិធីបង្កប់-imx ទៅ imxmkimage// ។
  3. [សម្រាប់តែ i.MX 93] ចម្លងរូបភាពនៃ ELE firmware container mx93a0-ahab-container.img នៃ firmware-sentinel ទៅ imx-mkimage/iMX9/ ។
  4. ចងក្រង U-Boot ។
    $ cd uboot-imx $ ធ្វើឱ្យ distclean
    $ ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- បង្កើត
    $ CROSS_COMPILE=aarch64-linux-gnu- បង្កើត -j
    $(nproc – ទាំងអស់)
    ដើម្បី​បង្កើត U-Boot ដោយ​មិន​មាន​ការ​គាំទ្រ Falcon (របៀប​ចាប់ផ្ដើម​លំនាំដើម​ដើម្បី​ពិនិត្យ​មើល​ថា​អ្វី​គ្រប់​យ៉ាង​ត្រូវ​បាន​ចងក្រង) សូម​ប្រើ​វិធី​ខាងក្រោម។
    1. imx8mm_evk_defconfig សម្រាប់ i.MX 8MM
    2. imx8mn_evk_defconfig សម្រាប់ i.MX 8MN
    3. imx8mp_evk_defconfig សម្រាប់ i.MX 8MP
    4. imx93_11x11_evk_defconfig សម្រាប់ i.MX 93 សម្រាប់របៀប Falcon គឺ (ប្រើ defconfig នេះ file បន្ទាប់ពីផ្នែកទី 7.3 "ការអនុវត្តរបៀប Falcon") ។
    5. imx8mm_evk_falcon_defconfig សម្រាប់ i.MX 8MM
    6. imx8mn_evk_falcon_defconfig សម្រាប់ i.MX 8MN
    7. imx8mp_evk_falcon_defconfig សម្រាប់ i.MX 8MP
    8. imx93_11x11_evk_falcon_defconfig សម្រាប់ i.MX 93
  5. ចម្លង u-boot*.bin និង spl/u-boot-spl*.bin ទៅក្នុង imx-mkimage// ។
  6. ចម្លង imx8mm-evk.dtb (សម្រាប់ i.MX 8M Mini LPDDR4 EVK) ឬ imx8mn-evk.dtb (សម្រាប់ i.MX 8M Nano LPDDR4 EVK) ឬ imx8mp-evk.dtb (សម្រាប់ i.MX 8M Plus LPDDR4 EVK) ឬ imx93 -11×11-evk.dtb សម្រាប់ (i.MX 93 11×11 LPDDR4 EVK) ពី uboot-imx/arch/arm/dts/ ទៅ imx-mkimage// ។
  7. ចម្លង mkimage ពី uboot-imx/tools/ ចូលទៅក្នុង imx-mkimage// ដោយប្តូរឈ្មោះទៅជា mkimage_uboot។
    $ cp uboot-imx/tools/mkimage imx-mkimage//mkimage_uboot
  8. បង្កើតរូបភាព U-Boot ពេញលេញ៖ flash.bin
    $ cd imx-mkimage # សម្រាប់ i.MX 8M*
    $ make SOC=flash_evk# សម្រាប់ i.MX 93
    $ make SOC=iMX9 flash_singleboot
    កន្លែងដែលអាចយកតម្លៃដូចខាងក្រោម: iMX8MM, iMX8MN, iMX8MP ។

បង្កើតខឺណែលលីនុច

$ cd linux-imx
$ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- បង្កើត imx_v8_defconfig
$ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make -j $(nproc –all) ទាំងអស់

លទ្ធផលរូបភាពគោលពីរមានទីតាំងនៅក្នុង arch/arm64/boot directory។

សរសេរប្រព័ន្ធគោលពីរនៅលើកាត SD

ដើម្បី​ពិនិត្យ​មើល​ថា​ការ​បង្កើត​គឺ​ត្រឹមត្រូវ សូម​សរសេរ​លទ្ធផល​គោលពីរ​នៅលើ​កាត SD ហើយ​ចាប់ផ្ដើម​ក្តារ។

  • សរសេររូបភាព U-Boot៖
    $ sudo dd if=flash.bin of=/dev/sd bs=1k seek= conv=fsync
    នៅឯណា:
  • 32 – សម្រាប់ i.MX 8M Nano, i.MX 8M Plus និង i.MX 93
  • 33 - សម្រាប់ i.MX 8M Mini
  • សរសេរខឺណែលលីនុច៖
    $ sudo mount /dev/sd1 /mnt
    $ cp រូបភាព / mnt
    $ umount / mnt

ការបង្កើនប្រសិទ្ធភាពកម្មវិធីចាប់ផ្ដើមប្រព័ន្ធ

ជំពូកនេះរួមបញ្ចូលព័ត៌មានខាងក្រោម។

  • ផ្នែកទី 7.1 "របៀបចាប់ផ្ដើមលំនាំដើម"
  • ផ្នែកទី 7.2 "របៀប Falcon"
  • ផ្នែកទី 7.3 "ការអនុវត្តរបៀប Falcon"
  • ផ្នែកទី 7.4 "ផែនទីសតិ"
  • ផ្នែកទី 7.5 "ការហៅមុខងារក្នុងអំឡុងពេលរបៀប Falcon"

របៀបចាប់ផ្ដើមលំនាំដើម

រូបភាពទី 1 ពិពណ៌នាអំពីលំដាប់ចាប់ផ្ដើមលំនាំដើម។ បន្ទាប់ពីបើក ឬកំណត់ឡើងវិញ i.MX 8M ដំណើរការ Boot ROM (កម្មវិធីផ្ទុកកម្មវិធីចម្បង) ដែលរក្សាទុកក្នុងអង្គចងចាំបានតែអាន (រ៉ូម) របស់វា។

Boot ROM កំណត់រចនាសម្ព័ន្ធប្រព័ន្ធនៅលើបន្ទះឈីប (SoC) ដោយដំណើរការការចាប់ផ្តើមគ្រឿងកុំព្យូទ័រជាមូលដ្ឋានដូចជា Phase Locked Loops (PLLs) ការកំណត់រចនាសម្ព័ន្ធនាឡិកា ការចាប់ផ្ដើមអង្គចងចាំ (SRAM) ។ បន្ទាប់មកវារកឃើញឧបករណ៍ចាប់ផ្ដើមពីកន្លែងដែលវាផ្ទុករូបភាពកម្មវិធីចាប់ផ្ដើមប្រព័ន្ធ ដែលអាចរួមបញ្ចូលសមាសធាតុដូចខាងក្រោមៈ U-Boot SPL, ATF, U-Boot ជាដើម។
របៀបចាប់ផ្ដើមលំនាំដើម
រូបភាព U-Boot ធម្មតាមិនសមនឹងខាងក្នុង SRAM ទេ ដូច្នេះហើយត្រូវបានបំបែកជាពីរផ្នែក៖ កម្មវិធីផ្ទុកកម្មវិធីបន្ទាប់បន្សំ (SPL) និង U-Boot ត្រឹមត្រូវ។

SPL គឺជា s ដំបូងtage នៃកម្មវិធីចាប់ផ្ដើមប្រព័ន្ធ ដែលជាការផ្ទុកជាមុនតូចជាងដែលចែករំលែកប្រភពជា U-Boot ប៉ុន្តែជាមួយនឹងសំណុំកូដតិចតួចដែលសមនឹង SRAM ។ SPL ត្រូវបានផ្ទុកទៅក្នុង SRAM ។ វាកំណត់រចនាសម្ព័ន្ធ និងចាប់ផ្តើមគ្រឿងកុំព្យូទ័រមួយចំនួន ហើយសំខាន់បំផុតគឺ ថាមវន្ត random-access memory (DRAM)។ ក្រោយមកវាផ្ទុក ATF និង U-Boot ត្រឹមត្រូវទៅក្នុង DRAM ។ ជំហានចុងក្រោយគឺលោតទៅ ATF ដែលនឹងលោតទៅ U-Boot ត្រឹមត្រូវ។

Arm Trusted Firmware (ATF), ថ្មីៗនេះរួមបញ្ចូលនៅក្នុងគ្រួសារ i.MX8* ផ្តល់នូវមូលដ្ឋានកូដដែលអាចទុកចិត្តបានយោងសម្រាប់ស្ថាបត្យកម្ម Armv8 ។ វាអនុវត្តស្តង់ដារចំណុចប្រទាក់ Arm ជាច្រើនរួមទាំង Power State Coordination Interface (PSCI) ។ ជាធម្មតាប្រព័ន្ធគោលពីរត្រូវបានរួមបញ្ចូលនៅក្នុងប្រព័ន្ធគោលពីរ bootloader ។ វាត្រូវបានចាប់ផ្តើមនៅដើមឆ្នាំtages នៃ U-Boot ។ បើគ្មាន ATF ទេ ខឺណែលមិនអាចដំឡើងសេវាកម្មដែលត្រូវតែប្រតិបត្តិក្នុងបរិស្ថាន Secure World បានទេ។

U-Boot ត្រឹមត្រូវ។ គឺជា s ទីពីរtage កម្មវិធីចាប់ផ្ដើមប្រព័ន្ធ។ វាផ្តល់នូវវិធីដែលអាចបត់បែនបានក្នុងការផ្ទុក និងចាប់ផ្តើមខឺណែលលីនុច។ ដូចគ្នានេះផងដែរវាផ្តល់នូវសំណុំឧបករណ៍តិចតួចបំផុតដើម្បីធ្វើអន្តរកម្មជាមួយផ្នែករឹងនៅលើក្តារតាមរយៈចំណុចប្រទាក់បន្ទាត់ពាក្យបញ្ជា។ វាដំណើរការពី DRAM និងចាប់ផ្តើមឧបករណ៍ផ្នែករឹងបន្ថែម។ សម្រាប់អតីតample, network, USB, និង DSI/CSI។ បន្ទាប់មក វាផ្ទុក និងរៀបចំមែកធាងឧបករណ៍ (FDT)។ ភារកិច្ចចម្បងដែលគ្រប់គ្រងដោយ U-Boot គឺការផ្ទុក និងចាប់ផ្តើមរូបភាពខឺណែលខ្លួនឯង។

ខឺណែលលីនុច ដំណើរការពី DRAM និងគ្រប់គ្រងប្រព័ន្ធទាំងស្រុង។ U-Boot លែងមានការគ្រប់គ្រងលើប្រព័ន្ធចាប់ពីពេលនេះតទៅ។

របៀប Falcon
របៀប Falcon គឺជាមុខងារមួយនៅក្នុង U-Boot ដែលបើកដំណើរការលឿនដោយអនុញ្ញាតឱ្យ SPL ចាប់ផ្តើមខឺណែលលីនុច។
វារំលងទាំងស្រុងលើការផ្ទុក U-Boot និងការចាប់ផ្ដើមដោយមានប្រសិទ្ធិភាពកាត់បន្ថយពេលវេលាដែលចំណាយក្នុងកម្មវិធីចាប់ផ្ដើមប្រព័ន្ធ។

រូបភាពទី 2 បង្ហាញពីលំដាប់នៃការចាប់ផ្ដើមរបៀប Falcon ។
របៀប Falcon

ដើម្បីអនុវត្តរបៀបនេះ សូមអនុវត្តសកម្មភាពដូចខាងក្រោម៖

  • បើកដំណើរការការកំណត់ជាក់លាក់មួយចំនួនសម្រាប់ Falcon ។
  • រៀបចំមែកធាងឧបករណ៍រុញ (FDT) ជាមុន។
  • កំណត់រចនាសម្ព័ន្ធ ATF ដើម្បីលោតទៅខឺណែល។
  • បង្កើតរូបភាពមែកធាងរូបភាពសំប៉ែតខឺណែល (FIT) ដែលមាន ATF និងរូបភាពខឺណែល។

ការអនុវត្តមុខងារ Falcon

ដើម្បីភាពងាយស្រួលនៃការអនុវត្ត បំណះស៊េរីមួយត្រូវបានរៀបចំសម្រាប់ការបើករបៀប Falcon ។
ទាញយកកម្មវិធីដែលពាក់ព័ន្ធ AN14093SW.zip ដើម្បីទទួលបានបំណះ ហើយអនុវត្តជំហានខាងក្រោម។

អនុវត្តបំណះ U-Boot៖
$ cd uboot-imx
$ git am 0001-Enable-Fast-Boot-on-i.MX-8M-Family-and-i.MX-93.patch

បំណះនេះបង្កើតការកំណត់រចនាសម្ព័ន្ធ Falcon files សម្រាប់វេទិកានីមួយៗ (i.MX 8M និង i.MX 93) ដែលអាចរកបាននៅក្នុងថត uboot-imx/configs/ ក្រោមឈ្មោះ៖ _falcon_ defconfig ។ ការកំណត់រចនាសម្ព័ន្ធ files គឺផ្អែកលើលំនាំដើម _defconfig ដែលការគាំទ្រ Falcon ត្រូវបានបន្ថែមដូចខាងក្រោម។

ប៉ារ៉ាម៉ែត្រដែលបានបើក [=y]

  • CONFIG_SPL_SERIAL
  • CONFIG_CMD_SPL — បើកដំណើរការពាក្យបញ្ជានាំចេញ spl នៅក្នុង U-Boot; តម្រូវការសម្រាប់ជំហានទី 15 ។
  • CONFIG_SPL_MMC — បើក SPL ដើម្បីអានពី MMC ដោយប្រើ SPL MMC API ។
  • CONFIG_MMC_BROKEN_CD [សម្រាប់តែ i.MX 93]
  • CONFIG_SPL_FS_FAT — បើក SPL ដើម្បីអានពីភាគ FAT ។
  • CONFIG_SPL_LOAD_FIT
  • CONFIG_FIT
  • CONFIG_SPL_OS_BOOT — ធ្វើឱ្យមុខងារ Falcon សកម្ម។
  • CONFIG_ SPL_MMC_IO_VOLTAGE និង CONFIG_SPL_MMC_UHS_SUPPORT — បើកដំណើរការការផ្ទេរល្បឿនលឿន MMC សម្រាប់ SPL ដែលប្រើដើម្បីកាត់បន្ថយពេលវេលាផ្ទុកសម្រាប់រូបភាពខឺណែល (*មិនដំណើរការសម្រាប់ i.MX 8MM
    ចាប់តាំងពី SPL DM មិនត្រូវបានគាំទ្រដោយសារការកំណត់ទំហំ OCRAM)។
  • CONFIG_LTO [សម្រាប់តែ i.MX 8MN] — កាត់បន្ថយទំហំគោលពីរដោយបន្ថែមការបង្កើនប្រសិទ្ធភាពពេលវេលាភ្ជាប់។ ទាមទារនៅលើ i.MX 8M Nano ដើម្បីធានាបាននូវរូបភាព SPL ជាមួយនឹងការគាំទ្រ FAT សម។
    បានបិទប៉ារ៉ាម៉ែត្រ [=n]
    CONFIG_SPL_BOOTROM_SUPPORT
    កំណត់ប៉ារ៉ាម៉ែត្រ
    CONFIG_SYS_SPL_ARGS_ADDR
    ជាមួយ:
  • 0x43000000 សម្រាប់ i.MX 8MN, i.MX 8MM និង i.MX 8MP
  • 0x83000000 សម្រាប់ i.MX 93
    CONFIG_SPL_FS_LOAD_PAYLOAD_NAME ជាមួយ u-boot.itb
    CONFIG_SPL_FS_LOAD_KERNEL_NAME ជាមួយ Image.itb
    CONFIG_SPL_FS_LOAD_ARGS_NAME ជាមួយ៖
  • imx8mm-evk-falcon.dtb សម្រាប់ i.MX 8MM
  • imx8mn-evk-falcon.dtb សម្រាប់ i.MX 8MN
  • imx8mp-evk-falcon.dtb សម្រាប់ i.MX 8MP
  • imx93-11x11-evk-falcon.dtb សម្រាប់ i.MX 93
    CONFIG_CMD_SPL_WRITE_SIZE ជាមួយ 0xC000
    CONFIG_FIT_EXTERNAL_OFFSET=0x3000 [សម្រាប់តែ i.MX 93]
    លើសពីនេះទៀតបំណះអនុវត្តមុខងារ spl_start_uboot() ដែលមានទីតាំងនៅ uboot-imx/board/ freescale//spl.c ដែលជាកន្លែង៖ imx8mm_evk, imx8mn_evk, imx8mp_evk ឬ imx93_evk ។ មុខងារនេះពិនិត្យមើលថាតើ SPL គួរតែចាប់ផ្តើមខឺណែល ឬ U-Boot ។ ប្រសិនបើគ្រាប់ចុច 'c' ត្រូវបានចុចកំឡុងពេលចាប់ផ្ដើម មុខងារនឹងត្រឡប់ 1 មានន័យថា U-Boot ត្រូវតែចាប់ផ្តើម។ បើមិនដូច្នោះទេ SPL គួរតែចាប់ផ្តើមខឺណែល។ ដើម្បីបង្ហាញវានៅក្នុងស្ថានភាពប្រតិបត្តិការដែល Ethernet MAC អាចធ្វើអន្តរកម្មជាមួយ PHY នោះ PHY ត្រូវតែកំណត់ឡើងវិញពី SPL សម្រាប់ i.MX 8M Family។ នេះក៏ត្រូវបានបន្ថែមនៅពេលអនុវត្តបំណះ U-Boot ។ PHY ត្រូវបានកំណត់ឡើងវិញនៅក្នុងមុខងារ board_init_r() ដែលមានទីតាំងនៅ uboot-imx/common/spl/spl.c file.

អនុវត្តបំណះ ATF៖
$ cd imx-atf
$ git am 0001-Add-support-to-jump-to-Kernel-directly-from-ATF.patch
បំណះបន្ថែមការគាំទ្រសម្រាប់ការលោតដោយផ្ទាល់ទៅខឺណែល។ ដោយសារ ATF មិនគាំទ្រការលោតដោយផ្ទាល់ទៅខឺណែលនៅលើវេទិកា NXP អាសយដ្ឋាន FDT ត្រូវតែឆ្លងកាត់ជាអាគុយម៉ង់ ក្នុងមុខងារ bl31_early_platform_setup2() ដែលមានទីតាំងនៅ imx-atf/plat/imx/imx8m// _bl31_setup.c សម្រាប់ i.MX8M គ្រួសារ និង imx-atf/plat/imx/imx93/imx93_bl31_setup.c សម្រាប់ i.MX93 ។

អនុវត្តបំណះ mkimage៖

$ cd imx-mkimage
$ git am 0001-Add-scripts-for-Fast-Boot-implementation-for-i.MX8M-.patch

បំណះនេះបន្ថែមលក្ខណសម្បត្តិ "os" ទៅថ្នាំង uboot-1 នៃប្រភពរូបភាព U-Boot FIT (u-boot.its) ។ លក្ខណសម្បត្តិនេះត្រូវបានទាមទារនៅពេលផ្ទុក U-Boot (ករណីនៅពេលដែល spl_start_uboot() ត្រឡប់ 1) ខណៈពេលដែល Falcon របៀបត្រូវបានបើក។ បើមិនដូច្នោះទេ U-Boot បរាជ័យក្នុងការចាប់ផ្ដើម។
លើសពីនេះទៀតបំណះបន្ថែមស្គ្រីបដែលបង្កើតរូបភាព U-Boot FIT សម្រាប់ i.MX 93 (ចាប់តាំងពីនៅក្នុងកំណែនេះមិនមាន): imx-mkimage/iMX9/mkimage_fit_atf.sh ។
ស្គ្រីបទីពីរដែលបានបន្ថែមដោយបំណះនេះគឺជាអ្វីដែលប្រើដើម្បីបង្កើតរូបភាពខឺណែល FIT (ATF + ខឺណែល) - ត្រូវការសម្រាប់ការអនុវត្តរបៀប Falcon ។ ស្គ្រីបនេះត្រូវបានប្រើសម្រាប់ទាំង i.MX 8M Family និង i.MX 93។

  1. បង្កើត ATF ដូចមានចែងក្នុង ផ្នែកទី 5.1 ។ ចម្លងប្រព័ន្ធគោលពីរ ATF ដែលបានកែប្រែទៅជា imx-mkimage // ។
  2. បង្កើតរូបភាពកម្មវិធីចាប់ផ្ដើមប្រព័ន្ធដូចមានចែងក្នុងផ្នែកទី 5.2 - របៀប Falcon ។ សរសេរលទ្ធផលប្រព័ន្ធគោលពីរ U-Boot យោងតាមផ្នែកទី 6 ។
  3. [សម្រាប់តែ i.MX93] បង្កើតរូបភាព U-Boot FIT ។ នៅពេលបង្កើតរូបភាព flash.bin រូបភាព u-boot.itb FIT មិនត្រូវបានបង្កើតដោយស្វ័យប្រវត្តិសម្រាប់ i.MX93 ទេ ដោយសារមិនមានស្គ្រីបដែលបង្កើតវា។
    $ cd imx-mkimage/iMX9
    $DEK_BLOB_LOAD_ADDR=0x80400000 TEE_LOAD_ADDR=0x96000000
    ATF_LOAD_ADDR=0x204e0000 ./mkimage_fit_atf.sh imx93-11×11-evk.dtb > u-boot.its
    $ ./mkimage_uboot -E -p 0x3000 -f u-boot.its u-boot.itb
  4. ចម្លងប្រព័ន្ធគោលពីរ u-boot.itb ដែលមានទីតាំងនៅ imx-mkimage/ នៅលើភាគថាសដំបូង (FAT) នៃកាត SD ។
  5. មុនពេលបង្កើតខឺណែលលីនុច អ្នកប្រហែលជាចង់បង្កើនប្រសិទ្ធភាពវាយោងទៅតាមផ្នែកទី 8.2 “យកកម្មវិធីបញ្ជាដែលមិនចាំបាច់ចេញ និង file ប្រព័ន្ធ”។ បង្កើតខឺណែលលីនុច យោងតាមផ្នែកទី 5.3 "បង្កើតខឺណែលលីនុច" ។
  6. បង្កើតរូបភាពខឺណែល FIT ។ រូបភាព FIT មាន ATF និងរូបភាពខឺណែល។ វាត្រូវបានផ្ទុកក្នុងអំឡុងពេលរបៀប Falcon ដោយ SPL ។ ដោយសារ SPL មិនផ្ទុករូបភាព ATF នៅក្នុងរបៀប Falcon នោះ ATF ត្រូវតែបញ្ចូលទៅក្នុងរូបភាព FIT ។
    ដើម្បីរៀបចំរូបភាព FIT (Image.itb) ស្គ្រីប mkimage_fit_atf_kernel.sh ត្រូវបានប្រើ។ ចម្លងរូបភាពខឺណែលទៅថត imx-mkimage //៖
    $ cp linux-imx/arch/arm64/boot/រូបភាព imx-mkimage/
    បង្កើតរូបភាព FIT៖
    • សម្រាប់ i.MX8M
      $ cd imx-mkimage/iMX8M
      # សម្រាប់ i.MX8MM
      $ATF_LOAD_ADDR=0x00920000 KERNEL_LOAD_ADDR=0x40200000 ../mkimage_fit_atf_kernel.sh
      > Image.its
      # សម្រាប់ i.MX8MN
      $ATF_LOAD_ADDR=0x00960000 KERNEL_LOAD_ADDR=0x40200000 ../mkimage_fit_atf_kernel.sh
      > Image.its
      # សម្រាប់ i.MX8MP
      $ATF_LOAD_ADDR=0x00970000 KERNEL_LOAD_ADDR=0x40200000 ../mkimage_fit_atf_kernel.sh
      > Image.its
      # ដើម្បីបង្កើតការរត់ប្រព័ន្ធគោលពីរ FIT៖
      $ ./mkimage_uboot -E -p 0x3000 -f Image.its Image.itb
    • សម្រាប់ i.MX93
      $ cd imx-mkimage/iMX9
      $ATF_LOAD_ADDR=0x204e0000 KERNEL_LOAD_ADDR=0x80200000 ../
      mkimage_fit_atf_kernel.sh > Image.its
      # ដើម្បីបង្កើតការរត់ប្រព័ន្ធគោលពីរ FIT៖
      $ ./mkimage_uboot -E -p 0x3000 -f Image.its Image.itb
  7. ចម្លងលទ្ធផល Image.itb file ទៅភាគថាសដំបូង (FAT) នៃកាតអេសឌី។
  8. រៀបចំមែកធាងឧបករណ៍រុញ ហើយសរសេរវានៅលើកាតអេសឌី។ នៅពេលចាប់ផ្ដើមនៅក្នុងរបៀប Falcon ជំហានសំខាន់មួយគឺត្រូវរៀបចំមែកធាងឧបករណ៍។ ជាធម្មតា U-Boot ធ្វើការជួសជុល FDT នៅពេលចាប់ផ្ដើមលីនុច។ វាមានន័យថាចំពោះមែកធាងឧបករណ៍ដំបូង U-Boot បន្ថែមអាគុយម៉ង់ខឺណែល និងថ្នាំងអង្គចងចាំ ក្នុងចំណោមការកែប្រែផ្សេងទៀត។ អាគុយម៉ង់ទាំងនេះអាចរកបាននៅក្នុងការកំណត់រចនាសម្ព័ន្ធមួយ។ files: uboot-imx/configs/_evk.h ក្រោមឈ្មោះ bootargs ។ ពួកគេបញ្ជាក់ប៉ារ៉ាម៉ែត្រកុងសូល ហើយប្រាប់ខឺណែលកន្លែងដែលត្រូវរកឫស file ប្រព័ន្ធ។ កន្លែងណា៖ imx8mm, imx8mn, imx8mp ឬ imx93 ។ មានវិធីពីរយ៉ាងក្នុងការបង្កើតមែកធាងឧបករណ៍ Flattened:
    • វិធីសាស្រ្ត 1: ដោយបន្ថែមការជួសជុលដែលត្រូវការដោយដៃទៅមែកធាងឧបករណ៍
    • វិធីសាស្រ្ត 2: ដោយអនុញ្ញាតឱ្យ U-Boot ធ្វើការជួសជុល និងរក្សាទុកនូវលទ្ធផលឧបករណ៍មែកធាង វិធីសាស្ត្រទី 2 មានលក្ខណៈទូទៅជាង និងទាមទារចំណេះដឹងតិចជាង ប៉ុន្តែវាក៏វែងជាង និងជាមួយជំហានផ្សេងទៀតជាច្រើន។
      វិធីសាស្រ្ត 1: អ្នកអាចព្យាយាមបង្កើត FDT ដោយដៃដោយបន្ថែម bootargs និងថ្នាំងអង្គចងចាំទៅមែកធាងឧបករណ៍ខឺណែល។ សម្រាប់អតីតample សម្រាប់ i.MX 93 បង្កើត imx93-11×11-evk-falcon.dts file នៅក្នុង linuximx/arch/arm64/boot/dts/freescale ហើយបន្ថែមបន្ទាត់កូដពីខាងក្រោម។ ថ្នាំងអង្គចងចាំត្រូវបានចម្លងពី DTS របស់ U-Boot ។ មែកធាងឧបករណ៍ដែលបានរួមបញ្ចូលអាចត្រូវបានផ្លាស់ប្តូរយោងទៅតាមករណីប្រើប្រាស់របស់អ្នក។ ក្នុងករណីនេះ យើងកំពុងប្រើមែកធាងឧបករណ៍ខឺណែលលំនាំដើម។
      #include “imx93-11×11-evk.dts” / { memory { reg = <0x00 0x80000000 0x00 0x80000000>; device_type = "អង្គចងចាំ"; }; បានជ្រើសរើស { bootargs = “console=ttyLP0,115200 earlycon root=/dev/mmcblk1p2 rootwait rw”; }; };
      ចងក្រងខឺណែលឡើងវិញដើម្បីបង្កើតប្រព័ន្ធគោលពីររបស់ឧបករណ៍ដែលពាក់ព័ន្ធ ហើយចម្លងលទ្ធផល imx93-11×11-
      evk-falcon ។ dtb file ទៅភាគថាសដំបូងនៃកាតអេសឌី។
      ប្រសិនបើអ្នកជ្រើសរើសវិធីសាស្ត្រទីមួយ ជំហានបន្ទាប់គឺត្រូវចាប់ផ្តើមក្តារ ហើយរបៀប Falcon គួរតែមានមុខងារ។
      វិធីសាស្រ្ត 2: FDT អាចត្រូវបានរៀបចំដោយប្រើពាក្យបញ្ជានាំចេញ spl នៅក្នុង U-Boot stagអ៊ី ដើម្បីចូលទៅក្នុង U-boat សូមចុចប៊ូតុង C។ ពាក្យ​បញ្ជា​គឺ​ស្មើ​នឹង​ការ​ដំណើរការ​រីក​ចម្រើន​រហូត​ដល់​ការ​ជួសជុល​មែកធាង​ឧបករណ៍
      រួចរាល់។ មែកធាងឧបករណ៍នៅក្នុងអង្គចងចាំគឺចាំបាច់សម្រាប់របៀប Falcon ។ រូបភាពនេះត្រូវតែរក្សាទុកទៅក្នុងភាគថាសចាប់ផ្ដើមកាតអេសឌី។
      [តម្រូវការជាមុន]
      a. បង្កើតកេរដំណែលខឺណែល u រូបភាព file ពីរូបភាព។
      រូបភាពគឺជារូបភាពពិសេស file ដែលបន្ថែមបឋមកថា 64 បៃមុនរូបភាពខឺណែលពិតប្រាកដ ដែលជាកន្លែងផ្ទុក
      ព័ត៌មានត្រូវបានបញ្ជាក់ (អាសយដ្ឋានផ្ទុក ចំណុចចូល ប្រភេទ OS និងដូច្នេះនៅលើ)។
      ប្រភេទនៃរូបភាពនេះគឺត្រូវការដោយពាក្យបញ្ជា spl ដើម្បីបង្កើតមែកធាងឧបករណ៍រុញ។
    • សម្រាប់ i.MX 8M
      $ cd linux-imx/arch/arm64/boot
      $ mkimage -A arm -O linux -T kernel -C none -a 0x43FFFFC0
      -e 0x44000000 -n "ខឺណែលលីនុច" -d រូបភាព uImage
      ឈ្មោះរូបភាព៖ ខឺណែលលីនុច
      បង្កើត៖ ថ្ងៃពុធ ទី២៦ ខែកក្កដា ម៉ោង ១៤:១២:០៩ ២០២៣
      ប្រភេទរូបភាព៖ រូបភាព ARM Linux Kernel (មិនបានបង្ហាប់)
      ទំហំទិន្នន័យ៖ 31072768 បៃ = 30344.50 KiB = 29.63 MiB
      អាសយដ្ឋានផ្ទុក៖ 43ffffc0
      ចំណុចចូល៖ 44000000
    • សម្រាប់ i.MX 93
      $ cd linux-imx/arch/arm64/boot
      $ mkimage -A arm -O linux -T kernel -C none -a 0x83FFFFC0
      -e 0x84000000 -n "ខឺណែលលីនុច" -d រូបភាព uImage
      ឈ្មោះរូបភាព៖ ខឺណែលលីនុច
      បង្កើត៖ ថ្ងៃពុធ ទី២៦ ខែកក្កដា ម៉ោង ១៤:១២:០៩ ២០២៣
      ប្រភេទរូបភាព៖ រូបភាព ARM Linux Kernel (មិនបានបង្ហាប់)
      ទំហំទិន្នន័យ៖ 31072768 បៃ = 30344.50 KiB = 29.63 MiB
      អាសយដ្ឋានផ្ទុក៖ 83ffffc0
      ចំណុចចូល៖ 84000000
      កន្លែងណា៖
      • A [ស្ថាបត្យកម្ម]: ដើម្បីកំណត់ស្ថាបត្យកម្ម។
      • O [os]៖ ដើម្បីកំណត់ប្រព័ន្ធប្រតិបត្តិការ។
      • T [ប្រភេទរូបភាព]៖ ដើម្បីកំណត់ប្រភេទរូបភាព។
      • C [ប្រភេទបង្ហាប់]៖ ដើម្បីកំណត់ប្រភេទបង្ហាប់។
      • n [ឈ្មោះរូបភាព]៖ ដើម្បីកំណត់ឈ្មោះរូបភាពទៅជាឈ្មោះរូបភាព។
      • ឃ [ទិន្នន័យរូបភាព file]៖ ដើម្បីប្រើទិន្នន័យរូបភាពពីទិន្នន័យរូបភាព file.
      • a [អាសយដ្ឋានផ្ទុក]៖ ដើម្បីកំណត់អាសយដ្ឋានផ្ទុកដោយលេខគោលដប់ប្រាំមួយ។
      • e [ចំណុចចូល]៖ ដើម្បីកំណត់ចំណុចចូលដោយលេខគោលដប់ប្រាំមួយ។
    • b. ចម្លងខឺណែល uImage ទៅភាគថាស EXT2 នៃកាត SD ។
      sudo mount /dev/sd2 /mnt
      $ sudo mkdir -p /mnt/home/root/.falcon
      $ sudo cp uImage /mnt/home/root/.falcon
      $ sudo umount / mnt
      ដើម្បីរៀបចំ FDT ដោយប្រើពាក្យបញ្ជា spl export សូមអនុវត្តជំហានខាងក្រោម។
      1. ចាប់ផ្ដើមបន្ទះចូលទៅក្នុង U-Boot ហើយបញ្ឈប់វាភ្លាមៗមុនពេលចូលទៅក្នុងលំដាប់ autoboot ។ ដើម្បីបញ្ចូលក្នុង U-Boot គ្រាប់ចុច 'c' ត្រូវតែចុចកំឡុងពេលចាប់ផ្ដើម។ នៅចំណុចនេះ របៀប Falcon បរាជ័យ ដោយសារមិនមាន FDT បានរៀបចំសម្រាប់ខឺណែលលីនុចនៅលើកាតអេសឌី។
      2. [ស្រេចចិត្ត] ប្រសិនបើអ្នកត្រូវការ FDT ផ្សេងពីលំនាំដើម សូមដំណើរការពាក្យបញ្ជាខាងក្រោមជាមុនសិន។ នេះ។ file ត្រូវតែនៅលើភាគថាស FAT នៅលើ SD ។
        u-boot => setenv fdtfile .dtb
      3. ផ្ទុក FDT ទៅក្នុង RAM ។
        u-boot => ដំណើរការ loadfdt
        43801 បៃអានក្នុង 15 ms (2.8 MiB/s)
      4. ផ្ទុកខឺណែល uImage ទៅក្នុង RAM ។
        u-boot=> ext2load mmc 1:2 ${loadaddr} /home/root/.falcon/uImage
        31072832 បៃអានក្នុង 387 ms (76.6 MiB/s)
      5. ប្រសិនបើអ្នកត្រូវការការបង្កើនប្រសិទ្ធភាពពេលចាប់ផ្ដើមខឺណែលផងដែរ សូមដំណើរការពាក្យបញ្ជាពីផ្នែក 8.1 "បន្ថែមស្ងាត់" ជំហានទី 2 មុនជំហានបន្ទាប់។
      6. ផ្ទុកអាគុយម៉ង់ចាប់ផ្ដើមខឺណែល។
        u-boot=> spl នាំចេញ fdt ${loadaddr} – ${fdt_addr_r}
        ## កំពុងចាប់ផ្ដើមខឺណែលពី Legacy Image នៅ 80400000 …
        ឈ្មោះរូបភាព៖ ខឺណែលលីនុច
        បង្កើត៖ 2023-07-19 6:57:40 UTC
        ប្រភេទរូបភាព៖ រូបភាព ARM Linux Kernel (មិនបានបង្ហាប់)
        ទំហំទិន្នន័យ៖ 31072768 បៃ = 29.6 មេកាបៃ
        អាសយដ្ឋានផ្ទុក៖ 83ffffc0
        ចំណុចចូល៖ 84000000
        កំពុងផ្ទៀងផ្ទាត់ Checksum … យល់ព្រម
        ## Flattened Device Tree blob នៅ 83000000
        ចាប់ផ្ដើមដោយប្រើ fdt blob នៅ 0x83000000
        ធ្វើការ FDT កំណត់ទៅ 83000000
        កំពុងផ្ទុករូបភាពខឺណែល។
        ការប្រើប្រាស់ Device Tree នៅនឹងកន្លែងនៅ 0000000083000000 បញ្ចប់ 000000008300db18
        ធ្វើការ FDT កំណត់ទៅ 83000000
        ពាក្យ​បញ្ជា​រង​បាន​បរាជ័យ (err=-1)
        ពាក្យ​បញ្ជា​រង​បាន​បរាជ័យ (err=-1)
        ការប្រើប្រាស់ Device Tree នៅនឹងកន្លែងនៅ 0000000083000000 បញ្ចប់ 0000000083010b18
        ធ្វើការ FDT កំណត់ទៅ 83000000
        រូបភាពអាគុយម៉ង់ឥឡូវនេះស្ថិតនៅក្នុង RAM៖ 0x0000000083000000
        ចំណាំ៖ ភាពខុសគ្នារវាងអាសយដ្ឋានចាប់ផ្តើម និងអាសយដ្ឋានចុងក្រោយនៅក្នុងអក្សរដិតខាងលើគឺជាទំហំនៃ FDT ដែលបានជួសជុលនៅក្នុងអង្គចងចាំ។ ចម្លង FDT លទ្ធផលពី RAM ទៅភាគថាស FAT នៃកាត SD ដែលបញ្ជាក់ទំហំច្បាប់ចម្លងត្រឹមត្រូវជាប៉ារ៉ាម៉ែត្រចុងក្រោយ។ នៅក្នុងអតីតample លទ្ធផលខាងលើ នោះនឹងជា 0x83010b18 – 0x83000000 = 0x10b18 ។
        # សម្រាប់ i.MX 93
        u-boot=> fatwrite mmc ${mmcdev}:${mmcpart} ${fdt_addr_r} imx93-11×11-
        evk-falcon.dtb 0x10b18
        ចំណាំ៖ ឈ្មោះរបស់ FDT ដែលបានរក្សាទុកត្រូវតែផ្គូផ្គងឈ្មោះដែលបានកំណត់ក្នុង
        CONFIG_SPL_FS_LOAD_ARGS_NAME អថេរក្នុងជំហានទី 1 ពីផ្នែកទី 7.3 “របៀប Falcon
        ការអនុវត្ត”។ បើមិនដូច្នោះទេ SPL មិនផ្ទុកមែកធាងឧបករណ៍នៅក្នុង DRAM ហើយបន្ទះមិនដំណើរការទេ។
  9. បន្ទាប់ពីចាប់ផ្ដើមឡើងវិញ តាមលំនាំដើម បន្ទះនឹងចាប់ផ្ដើមនៅក្នុងរបៀប Falcon ។

ផែនទីចងចាំ

រូបភាពទី 3 គឺជាផែនទីអង្គចងចាំក្នុងអំឡុងពេល Falcon Mode សម្រាប់ i.MX93 ។
BootROM ផ្ទុក SPL ហើយ SPL ដំណើរការពី RAM នៅលើបន្ទះឈីប (OCRAM - អង្គចងចាំខាងក្នុង) ។ SPL ចាប់ផ្តើម RAM ថាមវន្ត (DDR) ផ្ទុក ATF ទៅក្នុង OCRAM បន្ទាប់មកផ្ទុកមែកធាងឧបករណ៍ខឺណែល និងរូបភាពខឺណែលទៅក្នុង DDR ។ SPL មានទំហំអង្គចងចាំដែលបានបម្រុងទុកនៅក្នុង DDR សម្រាប់ malloc ។ ផ្ទៃនេះមិនត្រូវសរសេរជាន់លើទេ ខណៈពេលដែលនៅក្នុង SPL
ផែនទីចងចាំ
តារាងទី 2 រាយអាសយដ្ឋានសម្រាប់គ្រួសារ i.MX 8M ។

តារាង 2. i.MX 8M អាសយដ្ឋានគ្រួសារ}

វេទិកា SPL អេធីអេហ្វ រូបភាពខឺណែល ខឺណែល DTB
i.MX 8M Mini 0x007e1000 0x00920000 0x40200000 0x43000000
i.MX 8M Nano 0x00912000 0x00960000 0x40200000 0x43000000
i.MX 8M Plus 0x00920000 0x00970000 0x40200000 0x43000000

មុខងារហៅទូរសព្ទអំឡុងពេល Falcon mode
រូបភាពទី 4 រាយមុខងារសំខាន់ៗដែលហៅថាអំឡុងពេល SPL Falcon mode
ផែនទីចងចាំ

ការបង្កើនប្រសិទ្ធភាពចន្លោះខឺណែល

ផ្នែកនេះរាយបញ្ជីជំហានទៅកាន់ផ្នែកទី 8.1 "បន្ថែមភាពស្ងប់ស្ងាត់" និងផ្នែកទី 8.2 "ដកអ្នកបើកបរដែលមិនចាំបាច់ចេញ និង file ប្រព័ន្ធ”។

បន្ថែមភាពស្ងប់ស្ងាត់
ដើម្បីកាត់បន្ថយពេលវេលាខឺណែលប្រហែលពាក់កណ្តាល សូមបន្ថែមអាគុយម៉ង់ស្ងាត់នៅក្នុងខឺណែល botargos ។ វាទប់ស្កាត់សារបំបាត់កំហុសអំឡុងពេលចាប់ផ្តើមលីនុចលំដាប់។

ចំណាំ៖ មែកធាងឧបករណ៍ត្រូវតែត្រូវបានបង្កើតឡើងវិញជាមួយនឹង bootargs ថ្មី ដោយប្រើពាក្យបញ្ជា spl export ។

  1. ដើម្បីចូលទៅក្នុង U-Boot សូមសង្កត់គ្រាប់ចុច C ខណៈពេលកំពុងចាប់ផ្ដើម។
  2. កែសម្រួលប៉ារ៉ាម៉ែត្រ mmcargs ដោយបន្ថែមស្ងាត់។
    u-boot=> កែសម្រួល mmcargs
    កែសម្រួល៖ setenv bootargs ${jh_clk} console=${console} root=${mmcroot} ស្ងាត់
    u-boot=> saveenv
    កំពុងរក្សាទុកបរិស្ថានទៅ MMC… កំពុងសរសេរទៅ MMC(1)… យល់ព្រម
  3. បង្កើតឡើងវិញ និងរក្សាទុកមែកធាងឧបករណ៍ទៅក្នុងកាត SD ដូចនៅក្នុង ផ្នែកទី 7.3 "ការអនុវត្តរបៀប Falcon", ជំហានទី 14

យកកម្មវិធីបញ្ជាដែលមិនចាំបាច់ចេញ និង file ប្រព័ន្ធ
អាស្រ័យលើករណីប្រើប្រាស់របស់អ្នក អ្នកអាចកាត់បន្ថយខឺណែលដោយយកកម្មវិធីបញ្ជាដែលមិនចាំបាច់ចេញ និង file ប្រព័ន្ធ។
អ្នកអាចវិភាគមុខងារខឺណែលកំឡុងពេលចាប់ផ្ដើមជាមួយជីវប្រវត្តិ ដែលជាមុខងារខឺណែលដែលអនុញ្ញាតឱ្យអ្នកធ្វើក្រាហ្វិកនូវអ្វីដែលកើតឡើងនៅក្នុងខឺណែលកំឡុងពេលចាប់ផ្តើម។

ដើម្បីបង្កើត bootgraph សូមអនុវត្តតាមជំហានខាងក្រោម៖

  1. បន្ថែម initcall_debug ទៅខឺណែល botargos ។
    a. ដើម្បីបញ្ចូលក្នុង U-Boot សូមសង្កត់គ្រាប់ចុច C ពេលកំពុងដំណើរការ។
    b. កែសម្រួលប៉ារ៉ាម៉ែត្រ mmcargs ដោយបន្ថែម initcall_debug
    u-boot=> កែសម្រួល mmcargs
    កែសម្រួល៖ setenv bootargs ${jh_clk} console=${console} root=${mmcroot} ស្ងាត់
    initcall_debug
    u-boot=> saveenv
    កំពុងរក្សាទុកបរិស្ថានទៅ MMC… កំពុងសរសេរទៅ MMC(1)… យល់ព្រម
  2. បង្កើតឡើងវិញ និងរក្សាទុកមែកធាងឧបករណ៍ទៅក្នុងកាត SD ដូចនៅក្នុងផ្នែកទី 7.3 “ការអនុវត្តរបៀប Falcon” ជំហានទី 14។
  3. ចាប់ផ្ដើមក្តារហើយទទួលបានកំណត់ហេតុខឺណែល។
    root@imx8mn-lpddr4-evk:~# dmesg> boot.log
    boot.log file មានទិន្នន័យដូចជាកំណត់ហេតុខាងក្រោម។ ទិន្នន័យ​អាច​ត្រូវ​បាន​វិភាគ​លើ​រយៈពេល​ប៉ុន្មាន​ដែល​មុខងារ​នីមួយៗ​ចំណាយ​ពេល​ចាប់ផ្ដើម​ខឺណែល។
    [2.583922] initcall deferred_probe_initcall+0x0/0xb8 ត្រឡប់ 0 បន្ទាប់ពី 895357
    [2.583955] ហៅ genpd_power_off_unused+0x0/0x98 @ 1
    [2.583977] initcall genpd_power_off_unused+0x0/0x98 ត្រឡប់ 0 បន្ទាប់ពី 12 usec
    [2.583984] ហៅ genpd_debug_init+0x0/0x90 @ 1
    [2.584312] initcall genpd_debug_init+0x0/0x90 ត្រឡប់ 0 បន្ទាប់ពី 321 usecs
    [2.584333] ហៅ ubi_init+0x0/0x23c @ 1
    [2.584627] initcall ubi_init+0x0/0x23c ត្រឡប់ 0 បន្ទាប់ពី 286 usecs
  4. ចម្លងលទ្ធផល boot.log file នៅលើម៉ាស៊ីនកុំព្យូទ័រ។ ត្រឡប់ទៅកុំព្យូទ័រម៉ាស៊ីនវិញ ហើយបង្កើតក្រាហ្វដោយប្រើពាក្យបញ្ជាខាងក្រោម។
    $ cd linux-imx/scripts
    $ ./bootgraph.pl boot.log > boot.svg
    អ្នកអាចទទួលបានអ្វីមួយដូចនេះ ហើយអាចវិភាគពីរបៀបដែលពេលវេលាចាប់ផ្ដើមខឺណែលត្រូវបានប្រើប្រាស់។
    បន្ថែមភាពស្ងប់ស្ងាត់
  5. ដើម្បីបិទកម្មវិធីបញ្ជា ឬមុខងារ ធ្វើបច្ចុប្បន្នភាពការកំណត់រចនាសម្ព័ន្ធខឺណែល។
    សម្រាប់អតីតampដូច្នេះ យើងបិទការបំបាត់កំហុសពីខឺណែល (ដែលកាត់បន្ថយទំហំរូបភាព) និង UBI file ប្រព័ន្ធ។
    a. ដំណើរការពាក្យបញ្ជាខាងក្រោមដើម្បីបញ្ចូលខឺណែល minicontig ។
    $ cd linux-imx
    $ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- បង្កើត imx_v8_defconfig
    $ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- បង្កើត ទំនាក់ទំនងតូច
    ពី menuconfig បិទ CONFIG_UBIFS_FS និង CONFIG_DEBUG_KERNEL ស្រដៀងនឹង
    ផ្នែកទី 7.3 "ការអនុវត្តរបៀប Falcon" ។ លទ្ធផល .config file មានបន្ទាត់ខាងក្រោម។
    # CONFIG_UBIFS_FS មិនត្រូវបានកំណត់ទេ។
    # CONFIG_DEBUG_KERNEL មិនត្រូវបានកំណត់ទេ។
    b. បង្កើតរូបភាពខឺណែលថ្មី។
    $ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- ធ្វើ​ទាំងអស់
    c. បង្កើតរូបភាពខឺណែល FIT ឡើងវិញដូចនៅក្នុងផ្នែកទី 7.3 "ការអនុវត្តរបៀប Falcon" ជំហានទី 13 ហើយចម្លងវា
    ទៅភាគថាសចាប់ផ្ដើមកាតអេសឌី (FAT) ។
    d. [ស្រេចចិត្ត] ប្រសិនបើអ្នកចង់ប្រើខឺណែលដែលបានកែប្រែកំឡុងពេលចាប់ផ្ដើមធម្មតា សូមចម្លងរូបភាពគោលពីរថ្មីទៅភាគថាសចាប់ផ្ដើមកាតអេសឌីដំបូង។

ការបង្កើនប្រសិទ្ធភាពទំហំអ្នកប្រើប្រាស់

ផ្នែកនេះរាយបញ្ជីជំហានទៅផ្នែក "ចាប់ផ្តើមកម្មវិធីមុនពេលប្រព័ន្ធ" និងផ្នែក "ផ្លាស់ប្តូរភាពអាស្រ័យនៃឯកតាប្រព័ន្ធ" ។

ចាប់ផ្តើមកម្មវិធីមុនពេលរៀបចំប្រព័ន្ធ
ប្រសិនបើចាំបាច់ កម្មវិធីអាចត្រូវបានចាប់ផ្តើមមុនពេលរៀបចំប្រព័ន្ធ។

  1. បង្កើតស្គ្រីប /home/root/newinit.sh ដែលចាប់ផ្តើមកម្មវិធីរបស់អ្នកមុនពេល systemd ។ ខាងក្រោមនេះគឺជារឿងសាមញ្ញមួយ។
    exampពីវិធីចាប់ផ្តើមកម្មវិធីរបស់អ្នកមុនពេល systemd ។ ជំនួសបន្ទាត់អេកូជាមួយនឹងកម្មវិធីដែលអ្នកចង់បាន។
    #!/bin/sh
    បន្ទរ “ការចាប់ផ្តើមដំបូង” > /dev/kmsg
    exec /lib/systemd/systemd
  2. ធ្វើឱ្យស្គ្រីបអាចប្រតិបត្តិបាន។
    $ chmod +x newinit.sh
  3. ភ្ជាប់ /sbin/init ទៅស្គ្រីប newinit.sh របស់អ្នក។
    $ ln -sf /home/root/newinit.sh /sbin/init 
    ចំណាំ៖ ដើម្បីត្រឡប់ទៅការកំណត់ដំបូងវិញ សូមប្រើពាក្យបញ្ជាខាងក្រោម។
    $ ln -sf /lib/systemd/systemd /sbin/init
  4. ចាប់ផ្ដើមបន្ទះឡើងវិញ ហើយពិនិត្យមើលកំណត់ហេតុខឺណែល។ ការស្វែងរកខ្សែអក្សរ "Early start" នៅក្នុង dmesg បង្ហាញថាអក្សរ newinit.sh ត្រូវបានប្រតិបត្តិមុនពេលដំណើរការ init ។

ផ្លាស់ប្តូរភាពអាស្រ័យនៃឯកតាប្រព័ន្ធ
មធ្យោបាយងាយស្រួលបំផុតដើម្បីកាត់បន្ថយពេលវេលាដែលបានចំណាយក្នុងទំហំអ្នកប្រើប្រាស់គឺត្រូវរៀបចំលំដាប់ឡើងវិញនូវលំដាប់ដែលកម្មវិធីត្រូវបានដំណើរការ។
ដើម្បីចាប់ផ្តើមសេវាកម្មមុននេះ ផ្លាស់ប្តូរភាពអាស្រ័យដែលប្រព័ន្ធដំណើរការ។
នៅលើក្តារ សូមបើក /lib/systemd/system/.service file និងផ្លាស់ប្តូរឯកតាអាស្រ័យ។ សម្រាប់អតីតampឡេ
ចាប់ផ្តើមមុនពេល local-fs-pre.target ។
[ឯកតា]

មុន = local-fs-pre.target
ភាពអាស្រ័យលំនាំដើម = ទេ។

ប្រសិនបើពាក្យបញ្ជា system-analyze ត្រូវបានហៅជាមួយនឹងអាគុយម៉ង់ស្តីបន្ទោស Systemd ក៏ផ្តល់នូវឧបករណ៍ប្រើប្រាស់ដែលហៅថា systemd-analyze ដែលបោះពុម្ពសេវាកម្ម និងពេលវេលាចាប់ផ្តើមរបស់វា។
$systemd-វិភាគស្តីបន្ទោស

ដើម្បីបិទសេវាកម្មអ្នកអាចប្រើពាក្យបញ្ជា systemctl បិទ។ ដើម្បីបិទសេវាកម្មមួយចំនួន (ជាពិសេសប្រព័ន្ធដែលផ្តល់អោយ) សូមប្រើពាក្យបញ្ជា systemctl mask ។ ទោះជាយ៉ាងណាក៏ដោយ សូមប្រយ័ត្នពេលបិទសេវាកម្ម ព្រោះប្រព័ន្ធអាចពឹងផ្អែកលើពួកវាដើម្បីដំណើរការបានត្រឹមត្រូវ។

លទ្ធផល

តារាងទី 3. ការវាស់វែងពេលវេលាចាប់ផ្ដើមដំបូង

SPL យូ-ប៊ូត ខឺណែល
ក្តារ BootROM DDRការចាប់ផ្តើម SPLការចាប់ផ្តើម+ ផ្ទុករូបភាព U-Boot យូ-ប៊ូត ការចាប់ផ្តើម (init_ sequence_ f) យូ-ប៊ូត ការចាប់ផ្តើម (init_ sequence_ r) ចាប់ផ្ដើម លំដាប់ ខឺណែល រូបភាព ផ្ទុក ចាប់ផ្ដើម ATF + Kernel រហូតដល់ដំណើរការ INIT សរុប ពេលវេលា
(ms) (ms) (ms) (ms) (ms) (ms) (ms) (ms) (ms)
i.MX 8MN 161 241 162 363 790 2894 333 3506 8450
i.MX 8MP 162 301 175 373 1726 4181 345 3627 10890
i.MX 8MM 142 265 117 412 812 2970 396 5002 10116
i.MX ៨ 369 111 117 628 1172 3271 412 3090 9170

តារាងទី 4. ការវាស់វែងពេលវេលាចាប់ផ្ដើមបានល្អប្រសើរ

SPL ខឺណែល
ក្តារ BootROM ការចាប់ផ្តើម DDR ការចាប់ផ្តើម SPL ការផ្ទុករូបភាពខឺណែល[1] ATF + Kernel Boot រហូតដល់ដំណើរការ INIT[2] សរុប ពេលវេលា
(ms) (ms) (ms) (ms) (ms) (ms)
i.MX 8MN 203 240 86 376 1185 2090
i.MX 8MP 187 301 97 382 1237 2204
i.MX 8MM[3] 139 265 63 1336 2956[3] 4759
i.MX ៨ 374 111 89 366 1391 2330
  1. CONFIG_DEBUG_KERNEL ត្រូវបានបិទ ដែលបណ្តាលឱ្យទំហំរូបភាពខឺណែលតូចជាង => បន្ថយការផ្ទុករូបភាពខឺណែល។
  2. សារ​កំណត់​ហេតុ​ខឺណែល​ត្រូវ​បាន​បង្ក្រាប​ដោយ​ប្រើ​ស្ងាត់។
  3. i.MX 8M Mini EVK មិនមានភ្ជាប់មកជាមួយម៉ូឌុល Wi-Fi រួមបញ្ចូលគ្នាដែលភ្ជាប់ទៅច្រក PCIe (មិនដូច i.MX 8M Plus) ទេ។ ដូច្នេះការចាប់ផ្តើម PCIe PHY ត្រូវការពេលវេលារង់ចាំសម្រាប់តំណភ្ជាប់សកម្ម។ ប្រសិនបើម៉ូឌុល Wi-Fi ត្រូវបានភ្ជាប់ទៅចំណុចប្រទាក់ PCIe នោះពេលវេលាចាប់ផ្ដើមខឺណែលថយចុះដល់ 1215 ms ដូច្នេះពេលវេលាចាប់ផ្ដើមសរុបគឺ 3018 ms ។

ចំណាំអំពីកូដប្រភពនៅក្នុងឯកសារ

អតីតample កូដដែលបង្ហាញក្នុងឯកសារនេះមានសិទ្ធិរក្សាសិទ្ធិ និង BSD-3-Clause ដូចខាងក្រោម៖

រក្សាសិទ្ធិ 2023 NXP ការចែកចាយឡើងវិញ និងការប្រើប្រាស់ក្នុងទម្រង់ប្រភព និងប្រព័ន្ធគោលពីរ ដោយមានឬគ្មានការកែប្រែ ត្រូវបានអនុញ្ញាត ផ្តល់លក្ខខណ្ឌដូចខាងក្រោមត្រូវបានបំពេញ៖

  1. ការចែកចាយឡើងវិញនៃកូដប្រភពត្រូវតែរក្សាការជូនដំណឹងអំពីការរក្សាសិទ្ធិខាងលើ បញ្ជីលក្ខខណ្ឌ និងការបដិសេធខាងក្រោម។
  2. ការចែកចាយឡើងវិញក្នុងទម្រង់គោលពីរត្រូវតែបង្កើតឡើងវិញនូវការជូនដំណឹងអំពីការរក្សាសិទ្ធិខាងលើ បញ្ជីនៃលក្ខខណ្ឌនេះ និងការបដិសេធខាងក្រោមនៅក្នុងឯកសារ និង/ឬសម្ភារៈផ្សេងទៀតដែលបានផ្តល់ជាមួយនឹងការចែកចាយ។
  3. ទាំងឈ្មោះអ្នករក្សាសិទ្ធិនិងឈ្មោះអ្នកចូលរួមរបស់វាមិនអាចត្រូវបានប្រើដើម្បីគាំទ្រឬផ្សព្វផ្សាយផលិតផលដែលបានមកពីកម្មវិធីនេះដោយគ្មានការអនុញ្ញាតជាលាយលក្ខណ៍អក្សរជាមុន។

កម្មវិធីនេះត្រូវបានផ្តល់ដោយអ្នកកាន់កាប់សិទ្ធិអ្នកនិពន្ធ និងអ្នករួមចំណែក "ដូចដែលមាន" និងណាមួយ
ការធានាដោយប្រយោល ឬការធានាដោយប្រយោល រួមទាំង ប៉ុន្តែមិនកំណត់ចំពោះ ការធានាដោយអត្ថន័យនៃការលក់ដូរ និងសមភាពសម្រាប់គោលបំណងពិសេសមួយត្រូវបានបដិសេធ។ ក្នុងករណីណាក៏ដោយ អ្នកកាន់កាប់សិទ្ធិថតចម្លង ឬអ្នករួមចំណែកត្រូវទទួលខុសត្រូវចំពោះការខូចខាតដោយផ្ទាល់ ប្រយោល ឧប្បត្តិហេតុ ពិសេស គំរូ ឬការខូចខាតជាផលវិបាក (រួមទាំង ប៉ុន្តែមិនកំណត់ចំពោះការខូចខាត ការប្រើប្រាស់នីតិវិធី ទិន្នន័យ ឬប្រាក់ចំណេញ; ឬការរំខានអាជីវកម្ម) ទោះបីជាបណ្តាលមកពី និងលើទ្រឹស្ដីទំនួលខុសត្រូវណាមួយ ទោះជានៅក្នុងកិច្ចសន្យា ទំនួលខុសត្រូវយ៉ាងតឹងរ៉ឹង ឬទារុណកម្ម (រួមទាំងការធ្វេសប្រហែស ឬបើមិនដូច្នេះទេ) ដែលកើតឡើងនៅក្នុងវិធីណាក៏ដោយ នៃការប្រើប្រាស់នៅពេលនោះ ភាពងាយរងគ្រោះនៃការខូចខាតបែបនេះ។

ប្រវត្តិនៃការពិនិត្យឡើងវិញ

តារាង 5. ប្រវត្តិនៃការពិនិត្យឡើងវិញ

លេខកែប្រែ កាលបរិច្ឆេទកែប្រែ ការពិពណ៌នា
1 ថ្ងៃទី 09 ខែតុលាឆ្នាំ 2023 ការចេញផ្សាយដំបូង

ព័ត៌មានផ្លូវច្បាប់

និយមន័យ
សេចក្តីព្រាង - ស្ថានភាពព្រាងនៅលើឯកសារបង្ហាញថាខ្លឹមសារនៅតែស្ថិតក្រោមការកែប្រែផ្ទៃក្នុងview និងស្ថិតនៅក្រោមការយល់ព្រមជាផ្លូវការ ដែលអាចបណ្តាលឱ្យមានការកែប្រែ ឬបន្ថែម។ NXP Semiconductors មិនផ្តល់ការតំណាង ឬការធានាណាមួយអំពីភាពត្រឹមត្រូវ ឬពេញលេញនៃព័ត៌មានដែលរួមបញ្ចូលនៅក្នុងកំណែព្រាងនៃឯកសារ ហើយនឹងមិនទទួលខុសត្រូវចំពោះផលវិបាកនៃការប្រើប្រាស់ព័ត៌មាននោះទេ។

ការបដិសេធ
ការធានា និងការទទួលខុសត្រូវមានកំណត់ — ព័ត៌មាននៅក្នុងឯកសារនេះត្រូវបានគេជឿថាមានភាពត្រឹមត្រូវ និងអាចទុកចិត្តបាន។ ទោះជាយ៉ាងណាក៏ដោយ NXP Semiconductors មិនផ្តល់ការតំណាង ឬការធានាណាមួយដែលបានបង្ហាញ ឬបង្កប់ន័យចំពោះភាពត្រឹមត្រូវ ឬពេញលេញនៃព័ត៌មាននោះទេ ហើយនឹងមិនទទួលខុសត្រូវចំពោះផលវិបាកនៃការប្រើប្រាស់ព័ត៌មាននោះទេ។ NXP Semiconductors មិនទទួលខុសត្រូវចំពោះខ្លឹមសារនៅក្នុងឯកសារនេះទេ ប្រសិនបើផ្តល់ដោយប្រភពព័ត៌មាននៅខាងក្រៅ NXP Semiconductors។

នៅក្នុងព្រឹត្តិការណ៍ណាមួយ NXP Semiconductors នឹងមិនទទួលខុសត្រូវចំពោះការខូចខាតដោយប្រយោល ចៃដន្យ ការដាក់ទណ្ឌកម្ម ពិសេស ឬជាផលវិបាក (រួមទាំង - ដោយគ្មានដែនកំណត់ - ការបាត់បង់ប្រាក់ចំណេញ ការសន្សំដែលបាត់បង់ ការរំខានអាជីវកម្ម ការចំណាយទាក់ទងនឹងការដកចេញ ឬការជំនួសផលិតផល ឬថ្លៃការងារឡើងវិញ) ថាតើ ឬមិនមែនការខូចខាតបែបនេះគឺផ្អែកលើទារុណកម្ម (រួមទាំងការធ្វេសប្រហែស) ការធានា ការបំពានកិច្ចសន្យា ឬទ្រឹស្តីច្បាប់ផ្សេងទៀត។

ទោះបីជាការខូចខាតណាមួយដែលអតិថិជនអាចកើតឡើងដោយហេតុផលណាមួយក៏ដោយ ទំនួលខុសត្រូវសរុបរបស់ NXP Semiconductors ចំពោះអតិថិជនចំពោះផលិតផលដែលបានពិពណ៌នានៅទីនេះ នឹងត្រូវកំណត់ដោយអនុលោមតាមលក្ខខណ្ឌនៃការលក់ពាណិជ្ជកម្មរបស់ NXP Semiconductors ។

សិទ្ធិធ្វើការផ្លាស់ប្តូរ - NXP Semiconductors រក្សាសិទ្ធិដើម្បីធ្វើការផ្លាស់ប្តូរចំពោះព័ត៌មានដែលបានបោះពុម្ពផ្សាយក្នុងឯកសារនេះ រួមទាំងការពិពណ៌នាអំពីផលិតផលដោយគ្មានដែនកំណត់ គ្រប់ពេលវេលា និងដោយគ្មានការជូនដំណឹងជាមុន។ ឯកសារនេះជំនួស និងជំនួសព័ត៌មានទាំងអស់ដែលបានផ្តល់មុនការបោះពុម្ពផ្សាយនៅទីនេះ។

ភាពស័ក្តិសមសម្រាប់ការប្រើប្រាស់ - ផលិតផល NXP Semiconductors មិនត្រូវបានរចនា អនុញ្ញាត ឬធានាឱ្យមានលក្ខណៈសមរម្យសម្រាប់ប្រើប្រាស់ក្នុងការគាំទ្រជីវិត ប្រព័ន្ធ ឬឧបករណ៍ដែលមានសារៈសំខាន់សម្រាប់ជីវិត ឬសុវត្ថិភាព ឬនៅក្នុងកម្មវិធីដែលការបរាជ័យ ឬដំណើរការខុសប្រក្រតីនៃផលិតផល NXP Semiconductors អាចរំពឹងទុកដោយហេតុផលថានឹងមានលទ្ធផលនៅក្នុង ការរងរបួសផ្ទាល់ខ្លួន ការស្លាប់ ឬទ្រព្យសម្បត្តិធ្ងន់ធ្ងរ ឬការខូចខាតបរិស្ថាន។ NXP Semiconductors និងអ្នកផ្គត់ផ្គង់របស់ខ្លួនមិនទទួលខុសត្រូវចំពោះការដាក់បញ្ចូល និង/ឬការប្រើប្រាស់ផលិតផល NXP Semiconductors នៅក្នុងឧបករណ៍ ឬកម្មវិធីនោះទេ ដូច្នេះការដាក់បញ្ចូល និង/ឬការប្រើប្រាស់បែបនេះគឺស្ថិតក្នុងហានិភ័យផ្ទាល់ខ្លួនរបស់អតិថិជន។

កម្មវិធី — កម្មវិធីដែលត្រូវបានពិពណ៌នានៅទីនេះសម្រាប់ផលិតផលណាមួយគឺសម្រាប់គោលបំណងបង្ហាញតែប៉ុណ្ណោះ។ NXP Semiconductors មិនធ្វើតំណាង ឬការធានាថាកម្មវិធីបែបនេះនឹងសាកសមសម្រាប់ការប្រើប្រាស់ដែលបានបញ្ជាក់ដោយមិនចាំបាច់ធ្វើតេស្ត ឬកែប្រែបន្ថែម។ អតិថិជនត្រូវទទួលខុសត្រូវចំពោះការរចនា និងប្រតិបត្តិការនៃកម្មវិធី និងផលិតផលរបស់ពួកគេដោយប្រើប្រាស់ផលិតផល NXP Semiconductors ហើយ NXP Semiconductors មិនទទួលខុសត្រូវចំពោះជំនួយណាមួយជាមួយកម្មវិធី ឬការរចនាផលិតផលរបស់អតិថិជនឡើយ។ វាជាទំនួលខុសត្រូវតែមួយគត់របស់អតិថិជនក្នុងការកំណត់ថាតើផលិតផល NXP Semiconductors មានលក្ខណៈសមរម្យ និងសមនឹងកម្មវិធី និងផលិតផលរបស់អតិថិជនដែលបានគ្រោងទុក ក៏ដូចជាសម្រាប់កម្មវិធីដែលបានគ្រោងទុក និងការប្រើប្រាស់អតិថិជនភាគីទីបីរបស់អតិថិជនផងដែរ។ អតិថិជនគួរតែផ្តល់នូវការរចនា និងការការពារប្រតិបត្តិការសមស្រប ដើម្បីកាត់បន្ថយហានិភ័យដែលទាក់ទងនឹងកម្មវិធី និងផលិតផលរបស់ពួកគេ។

អិន។ ភី។ ភី Semiconductors មិនទទួលយកទំនួលខុសត្រូវណាមួយដែលទាក់ទងនឹងលំនាំដើម ការខូចខាត ការចំណាយ ឬបញ្ហាដែលផ្អែកលើភាពទន់ខ្សោយ ឬលំនាំដើមណាមួយនៅក្នុងកម្មវិធី ឬផលិតផលរបស់អតិថិជន ឬកម្មវិធី ឬការប្រើប្រាស់ដោយអតិថិជនភាគីទីបីរបស់អតិថិជននោះទេ។ អតិថិជនមានទំនួលខុសត្រូវក្នុងការធ្វើតេស្តចាំបាច់ទាំងអស់សម្រាប់កម្មវិធី និងផលិតផលរបស់អតិថិជនដោយប្រើផលិតផល NXP Semiconductors ដើម្បីជៀសវាងការបរាជ័យនៃកម្មវិធី និងផលិតផល ឬនៃកម្មវិធី ឬប្រើប្រាស់ដោយអតិថិជនភាគីទីបីរបស់អតិថិជន។ NXP មិនទទួលយកការទទួលខុសត្រូវណាមួយក្នុងន័យនេះទេ។

ល័ក្ខខ័ណ្ឌនៃការលក់ពាណិជ្ជកម្ម - ផលិតផល NXP Semiconductors ត្រូវបានលក់តាមលក្ខខណ្ឌទូទៅនៃការលក់ពាណិជ្ជកម្ម ដូចដែលបានចុះផ្សាយនៅ http://www.nxp.com/profile/លក្ខខណ្ឌ លុះត្រាតែមានការយល់ព្រមផ្សេងពីនេះក្នុងកិច្ចព្រមព្រៀងបុគ្គលដែលមានសុពលភាព។ ក្នុងករណីកិច្ចព្រមព្រៀងបុគ្គលត្រូវបានបញ្ចប់ មានតែលក្ខខណ្ឌនៃកិច្ចព្រមព្រៀងរៀងៗខ្លួនប៉ុណ្ណោះដែលត្រូវអនុវត្ត។ NXP Semiconductors សម្តែងការជំទាស់ចំពោះការអនុវត្តលក្ខខណ្ឌទូទៅរបស់អតិថិជនទាក់ទងនឹងការទិញផលិតផល NXP Semiconductors ដោយអតិថិជន។ ការត្រួតពិនិត្យការនាំចេញ — ឯកសារនេះក៏ដូចជាធាតុដែលបានពិពណ៌នានៅទីនេះអាចជាកម្មវត្ថុនៃបទប្បញ្ញត្តិត្រួតពិនិត្យការនាំចេញ។ ការនាំចេញអាចទាមទារការអនុញ្ញាតជាមុនពីអាជ្ញាធរមានសមត្ថកិច្ច។

ភាពស័ក្តិសមសម្រាប់ប្រើប្រាស់ក្នុងផលិតផលដែលមិនមានគុណភាពសម្រាប់រថយន្ត — លុះត្រាតែឯកសារនេះបញ្ជាក់យ៉ាងច្បាស់ថាផលិតផល NXP Semiconductors ជាក់លាក់នេះគឺមានលក្ខណៈសម្បត្តិគ្រប់គ្រាន់សម្រាប់រថយន្ត នោះផលិតផលមិនស័ក្តិសមសម្រាប់ការប្រើប្រាស់រថយន្តទេ។ វាមិនមានលក្ខណៈសម្បត្តិគ្រប់គ្រាន់ ឬត្រូវបានសាកល្បងដោយអនុលោមតាមការធ្វើតេស្តរថយន្ត ឬតម្រូវការកម្មវិធី NXP Semiconductors មិនទទួលខុសត្រូវចំពោះការរួមបញ្ចូល និង/ឬការប្រើប្រាស់ផលិតផលដែលមិនមានគុណភាពសម្រាប់រថយន្តនៅក្នុងឧបករណ៍ ឬកម្មវិធីរថយន្ត។

ក្នុងករណីដែលអតិថិជនប្រើប្រាស់ផលិតផលសម្រាប់ការរចនា និងប្រើប្រាស់ក្នុងកម្មវិធីរថយន្តទៅនឹងលក្ខណៈបច្ចេកទេស និងស្តង់ដាររថយន្ត អតិថិជន (ក) ត្រូវប្រើប្រាស់ផលិតផលដោយគ្មានការធានារបស់ NXP Semiconductors នៃផលិតផលសម្រាប់កម្មវិធីរថយន្ត ការប្រើប្រាស់ និងលក្ខណៈបច្ចេកទេស និង ( ខ) រាល់ពេលដែលអតិថិជនប្រើប្រាស់ផលិតផលសម្រាប់កម្មវិធីរថយន្តលើសពីលក្ខណៈបច្ចេកទេសរបស់ NXP Semiconductors ការប្រើប្រាស់បែបនេះត្រូវប្រឈមមុខនឹងហានិភ័យផ្ទាល់របស់អតិថិជន ហើយ (គ) អតិថិជននឹងសងសំណងទាំងស្រុងនូវ NXP Semiconductors សម្រាប់ការទទួលខុសត្រូវ ការខូចខាត ឬការទាមទារផលិតផលដែលបរាជ័យដែលបណ្តាលមកពីការរចនា និងការប្រើប្រាស់របស់អតិថិជន។ ផលិតផលសម្រាប់កម្មវិធីរថយន្តលើសពីការធានាស្តង់ដាររបស់ NXP Semiconductors និងផលិតផលជាក់លាក់របស់ NXP Semiconductors ។

ការបកប្រែ — កំណែដែលមិនមែនជាភាសាអង់គ្លេស (បកប្រែ) នៃឯកសារ រួមទាំងព័ត៌មានផ្លូវច្បាប់នៅក្នុងឯកសារនោះ គឺសម្រាប់ជាឯកសារយោងតែប៉ុណ្ណោះ។ កំណែជាភាសាអង់គ្លេសនឹងមានសុពលភាពក្នុងករណីមានភាពខុសគ្នារវាងកំណែដែលបានបកប្រែ និងភាសាអង់គ្លេស។

សន្តិសុខ - អតិថិជនយល់ថាផលិតផល NXP ទាំងអស់អាចទទួលរងនូវភាពងាយរងគ្រោះដែលមិនស្គាល់អត្តសញ្ញាណ ឬអាចគាំទ្រស្តង់ដារសុវត្ថិភាពដែលបានបង្កើតឡើង ឬលក្ខណៈជាក់លាក់ជាមួយនឹងដែនកំណត់ដែលគេស្គាល់។ អតិថិជនទទួលខុសត្រូវចំពោះការរចនា និងប្រតិបត្តិការនៃកម្មវិធី និងផលិតផលរបស់ខ្លួនពេញមួយវដ្តជីវិតរបស់ពួកគេ ដើម្បីកាត់បន្ថយឥទ្ធិពលនៃភាពងាយរងគ្រោះទាំងនេះលើកម្មវិធី និងផលិតផលរបស់អតិថិជន។ ទំនួលខុសត្រូវរបស់អតិថិជនក៏ពង្រីកដល់បច្ចេកវិទ្យាបើកចំហ និង/ឬកម្មសិទ្ធិផ្សេងទៀតដែលគាំទ្រដោយផលិតផល NXP សម្រាប់ប្រើប្រាស់ក្នុងកម្មវិធីរបស់អតិថិជន។ NXP មិនទទួលខុសត្រូវចំពោះភាពងាយរងគ្រោះណាមួយឡើយ។ អតិថិជនគួរតែពិនិត្យមើលការអាប់ដេតសុវត្ថិភាពពី NXP ជាទៀងទាត់ ហើយតាមដានដោយសមរម្យ។ អតិថិជនត្រូវជ្រើសរើសផលិតផលដែលមានលក្ខណៈពិសេសសុវត្ថិភាពដែលសមស្របបំផុតនឹងច្បាប់ បទប្បញ្ញត្តិ និងស្តង់ដារនៃកម្មវិធីដែលបានគ្រោងទុក ហើយធ្វើការសម្រេចចិត្តរចនាចុងក្រោយទាក់ទងនឹងផលិតផលរបស់ខ្លួន ហើយទទួលខុសត្រូវទាំងស្រុងចំពោះការអនុលោមតាមតម្រូវការច្បាប់ និយតកម្ម និងសុវត្ថិភាពទាំងអស់ទាក់ទងនឹងផលិតផលរបស់ខ្លួន ដោយមិនគិតពី ព័ត៌មាន ឬជំនួយដែលអាចត្រូវបានផ្តល់ដោយ NXP ។

អិន។ ភី។ ភី មានក្រុមឆ្លើយតបឧប្បត្តិហេតុសុវត្ថិភាពផលិតផល (PSIRT) (អាចទាក់ទងបាននៅ PSIRT@nxp.com) ដែលគ្រប់គ្រងការស៊ើបអង្កេត ការរាយការណ៍ និងការចេញផ្សាយដំណោះស្រាយចំពោះភាពងាយរងគ្រោះផ្នែកសុវត្ថិភាពនៃផលិតផល NXP ។

NXP BV — NXP BV មិនមែនជាក្រុមហ៊ុនប្រតិបត្តិការទេ ហើយវាមិនចែកចាយ ឬលក់ផលិតផលទេ។

ពាណិជ្ជសញ្ញា

សេចក្តីជូនដំណឹង៖ ម៉ាកដែលបានយោងទាំងអស់ ឈ្មោះផលិតផល ឈ្មោះសេវាកម្ម និងពាណិជ្ជសញ្ញា គឺជាកម្មសិទ្ធិរបស់ម្ចាស់រៀងៗខ្លួន។
NXP — ពាក្យ និងនិមិត្តសញ្ញា គឺជាពាណិជ្ជសញ្ញារបស់ NXP BV
EdgeLock — គឺជាពាណិជ្ជសញ្ញារបស់ NXP BV
i.MX — គឺជាពាណិជ្ជសញ្ញារបស់ NXP BV
Microsoft, Azure, និង ThreadX — គឺជាពាណិជ្ជសញ្ញារបស់ក្រុមក្រុមហ៊ុន Microsoft ។

ឯកសារ/ធនធាន

NXP AN14093 Fast Boot Falcon Mode Kernel [pdf] ការណែនាំអ្នកប្រើប្រាស់
AN14093 Fast Boot Falcon Mode Kernel, AN14093, Fast Boot Falcon Mode Kernel, Boot Falcon Mode Kernel, Falcon Mode Kernel, Mode Kernel

ឯកសារយោង

ទុកមតិយោបល់

អាសយដ្ឋានអ៊ីមែលរបស់អ្នកនឹងមិនត្រូវបានផ្សព្វផ្សាយទេ។ វាលដែលត្រូវការត្រូវបានសម្គាល់ *