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
- ចម្លង bl31.bin ពី ATF (build//release/) ទៅ imx-mkimage//
- ចម្លង lpddr4* ទាំងអស់ files ពីកម្មវិធីបង្កប់/ddr/synopsys/ នៃកញ្ចប់កម្មវិធីបង្កប់-imx ទៅ imxmkimage// ។
- [សម្រាប់តែ i.MX 93] ចម្លងរូបភាពនៃ ELE firmware container mx93a0-ahab-container.img នៃ firmware-sentinel ទៅ imx-mkimage/iMX9/ ។
- ចងក្រង U-Boot ។
$ cd uboot-imx $ ធ្វើឱ្យ distclean
$ ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- បង្កើត
$ CROSS_COMPILE=aarch64-linux-gnu- បង្កើត -j
$(nproc – ទាំងអស់)
ដើម្បីបង្កើត U-Boot ដោយមិនមានការគាំទ្រ Falcon (របៀបចាប់ផ្ដើមលំនាំដើមដើម្បីពិនិត្យមើលថាអ្វីគ្រប់យ៉ាងត្រូវបានចងក្រង) សូមប្រើវិធីខាងក្រោម។- imx8mm_evk_defconfig សម្រាប់ i.MX 8MM
- imx8mn_evk_defconfig សម្រាប់ i.MX 8MN
- imx8mp_evk_defconfig សម្រាប់ i.MX 8MP
- imx93_11x11_evk_defconfig សម្រាប់ i.MX 93 សម្រាប់របៀប Falcon គឺ (ប្រើ defconfig នេះ file បន្ទាប់ពីផ្នែកទី 7.3 "ការអនុវត្តរបៀប Falcon") ។
- imx8mm_evk_falcon_defconfig សម្រាប់ i.MX 8MM
- imx8mn_evk_falcon_defconfig សម្រាប់ i.MX 8MN
- imx8mp_evk_falcon_defconfig សម្រាប់ i.MX 8MP
- imx93_11x11_evk_falcon_defconfig សម្រាប់ i.MX 93
- ចម្លង u-boot*.bin និង spl/u-boot-spl*.bin ទៅក្នុង imx-mkimage// ។
- ចម្លង 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// ។
- ចម្លង mkimage ពី uboot-imx/tools/ ចូលទៅក្នុង imx-mkimage// ដោយប្តូរឈ្មោះទៅជា mkimage_uboot។
$ cp uboot-imx/tools/mkimage imx-mkimage//mkimage_uboot - បង្កើតរូបភាព 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 ។
- រៀបចំមែកធាងឧបករណ៍រុញ (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។
- បង្កើត ATF ដូចមានចែងក្នុង ផ្នែកទី 5.1 ។ ចម្លងប្រព័ន្ធគោលពីរ ATF ដែលបានកែប្រែទៅជា imx-mkimage // ។
- បង្កើតរូបភាពកម្មវិធីចាប់ផ្ដើមប្រព័ន្ធដូចមានចែងក្នុងផ្នែកទី 5.2 - របៀប Falcon ។ សរសេរលទ្ធផលប្រព័ន្ធគោលពីរ U-Boot យោងតាមផ្នែកទី 6 ។
- [សម្រាប់តែ 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 - ចម្លងប្រព័ន្ធគោលពីរ u-boot.itb ដែលមានទីតាំងនៅ imx-mkimage/ នៅលើភាគថាសដំបូង (FAT) នៃកាត SD ។
- មុនពេលបង្កើតខឺណែលលីនុច អ្នកប្រហែលជាចង់បង្កើនប្រសិទ្ធភាពវាយោងទៅតាមផ្នែកទី 8.2 “យកកម្មវិធីបញ្ជាដែលមិនចាំបាច់ចេញ និង file ប្រព័ន្ធ”។ បង្កើតខឺណែលលីនុច យោងតាមផ្នែកទី 5.3 "បង្កើតខឺណែលលីនុច" ។
- បង្កើតរូបភាពខឺណែល 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
- សម្រាប់ i.MX8M
- ចម្លងលទ្ធផល Image.itb file ទៅភាគថាសដំបូង (FAT) នៃកាតអេសឌី។
- រៀបចំមែកធាងឧបករណ៍រុញ ហើយសរសេរវានៅលើកាតអេសឌី។ នៅពេលចាប់ផ្ដើមនៅក្នុងរបៀប 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 [ចំណុចចូល]៖ ដើម្បីកំណត់ចំណុចចូលដោយលេខគោលដប់ប្រាំមួយ។
- A [ស្ថាបត្យកម្ម]: ដើម្បីកំណត់ស្ថាបត្យកម្ម។
- 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 សូមអនុវត្តជំហានខាងក្រោម។- ចាប់ផ្ដើមបន្ទះចូលទៅក្នុង U-Boot ហើយបញ្ឈប់វាភ្លាមៗមុនពេលចូលទៅក្នុងលំដាប់ autoboot ។ ដើម្បីបញ្ចូលក្នុង U-Boot គ្រាប់ចុច 'c' ត្រូវតែចុចកំឡុងពេលចាប់ផ្ដើម។ នៅចំណុចនេះ របៀប Falcon បរាជ័យ ដោយសារមិនមាន FDT បានរៀបចំសម្រាប់ខឺណែលលីនុចនៅលើកាតអេសឌី។
- [ស្រេចចិត្ត] ប្រសិនបើអ្នកត្រូវការ FDT ផ្សេងពីលំនាំដើម សូមដំណើរការពាក្យបញ្ជាខាងក្រោមជាមុនសិន។ នេះ។ file ត្រូវតែនៅលើភាគថាស FAT នៅលើ SD ។
u-boot => setenv fdtfile .dtb - ផ្ទុក FDT ទៅក្នុង RAM ។
u-boot => ដំណើរការ loadfdt
43801 បៃអានក្នុង 15 ms (2.8 MiB/s) - ផ្ទុកខឺណែល uImage ទៅក្នុង RAM ។
u-boot=> ext2load mmc 1:2 ${loadaddr} /home/root/.falcon/uImage
31072832 បៃអានក្នុង 387 ms (76.6 MiB/s) - ប្រសិនបើអ្នកត្រូវការការបង្កើនប្រសិទ្ធភាពពេលចាប់ផ្ដើមខឺណែលផងដែរ សូមដំណើរការពាក្យបញ្ជាពីផ្នែក 8.1 "បន្ថែមស្ងាត់" ជំហានទី 2 មុនជំហានបន្ទាប់។
- ផ្ទុកអាគុយម៉ង់ចាប់ផ្ដើមខឺណែល។
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 ហើយបន្ទះមិនដំណើរការទេ។
- បន្ទាប់ពីចាប់ផ្ដើមឡើងវិញ តាមលំនាំដើម បន្ទះនឹងចាប់ផ្ដើមនៅក្នុងរបៀប 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 ។
- ដើម្បីចូលទៅក្នុង U-Boot សូមសង្កត់គ្រាប់ចុច C ខណៈពេលកំពុងចាប់ផ្ដើម។
- កែសម្រួលប៉ារ៉ាម៉ែត្រ mmcargs ដោយបន្ថែមស្ងាត់។
u-boot=> កែសម្រួល mmcargs
កែសម្រួល៖ setenv bootargs ${jh_clk} console=${console} root=${mmcroot} ស្ងាត់
u-boot=> saveenv
កំពុងរក្សាទុកបរិស្ថានទៅ MMC… កំពុងសរសេរទៅ MMC(1)… យល់ព្រម - បង្កើតឡើងវិញ និងរក្សាទុកមែកធាងឧបករណ៍ទៅក្នុងកាត SD ដូចនៅក្នុង ផ្នែកទី 7.3 "ការអនុវត្តរបៀប Falcon", ជំហានទី 14
យកកម្មវិធីបញ្ជាដែលមិនចាំបាច់ចេញ និង file ប្រព័ន្ធ
អាស្រ័យលើករណីប្រើប្រាស់របស់អ្នក អ្នកអាចកាត់បន្ថយខឺណែលដោយយកកម្មវិធីបញ្ជាដែលមិនចាំបាច់ចេញ និង file ប្រព័ន្ធ។
អ្នកអាចវិភាគមុខងារខឺណែលកំឡុងពេលចាប់ផ្ដើមជាមួយជីវប្រវត្តិ ដែលជាមុខងារខឺណែលដែលអនុញ្ញាតឱ្យអ្នកធ្វើក្រាហ្វិកនូវអ្វីដែលកើតឡើងនៅក្នុងខឺណែលកំឡុងពេលចាប់ផ្តើម។
ដើម្បីបង្កើត bootgraph សូមអនុវត្តតាមជំហានខាងក្រោម៖
- បន្ថែម 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)… យល់ព្រម - បង្កើតឡើងវិញ និងរក្សាទុកមែកធាងឧបករណ៍ទៅក្នុងកាត SD ដូចនៅក្នុងផ្នែកទី 7.3 “ការអនុវត្តរបៀប Falcon” ជំហានទី 14។
- ចាប់ផ្ដើមក្តារហើយទទួលបានកំណត់ហេតុខឺណែល។
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 - ចម្លងលទ្ធផល boot.log file នៅលើម៉ាស៊ីនកុំព្យូទ័រ។ ត្រឡប់ទៅកុំព្យូទ័រម៉ាស៊ីនវិញ ហើយបង្កើតក្រាហ្វដោយប្រើពាក្យបញ្ជាខាងក្រោម។
$ cd linux-imx/scripts
$ ./bootgraph.pl boot.log > boot.svg
អ្នកអាចទទួលបានអ្វីមួយដូចនេះ ហើយអាចវិភាគពីរបៀបដែលពេលវេលាចាប់ផ្ដើមខឺណែលត្រូវបានប្រើប្រាស់។
- ដើម្បីបិទកម្មវិធីបញ្ជា ឬមុខងារ ធ្វើបច្ចុប្បន្នភាពការកំណត់រចនាសម្ព័ន្ធខឺណែល។
សម្រាប់អតីត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. [ស្រេចចិត្ត] ប្រសិនបើអ្នកចង់ប្រើខឺណែលដែលបានកែប្រែកំឡុងពេលចាប់ផ្ដើមធម្មតា សូមចម្លងរូបភាពគោលពីរថ្មីទៅភាគថាសចាប់ផ្ដើមកាតអេសឌីដំបូង។
ការបង្កើនប្រសិទ្ធភាពទំហំអ្នកប្រើប្រាស់
ផ្នែកនេះរាយបញ្ជីជំហានទៅផ្នែក "ចាប់ផ្តើមកម្មវិធីមុនពេលប្រព័ន្ធ" និងផ្នែក "ផ្លាស់ប្តូរភាពអាស្រ័យនៃឯកតាប្រព័ន្ធ" ។
ចាប់ផ្តើមកម្មវិធីមុនពេលរៀបចំប្រព័ន្ធ
ប្រសិនបើចាំបាច់ កម្មវិធីអាចត្រូវបានចាប់ផ្តើមមុនពេលរៀបចំប្រព័ន្ធ។
- បង្កើតស្គ្រីប /home/root/newinit.sh ដែលចាប់ផ្តើមកម្មវិធីរបស់អ្នកមុនពេល systemd ។ ខាងក្រោមនេះគឺជារឿងសាមញ្ញមួយ។
exampពីវិធីចាប់ផ្តើមកម្មវិធីរបស់អ្នកមុនពេល systemd ។ ជំនួសបន្ទាត់អេកូជាមួយនឹងកម្មវិធីដែលអ្នកចង់បាន។
#!/bin/sh
បន្ទរ “ការចាប់ផ្តើមដំបូង” > /dev/kmsg
exec /lib/systemd/systemd - ធ្វើឱ្យស្គ្រីបអាចប្រតិបត្តិបាន។
$ chmod +x newinit.sh - ភ្ជាប់ /sbin/init ទៅស្គ្រីប newinit.sh របស់អ្នក។
$ ln -sf /home/root/newinit.sh /sbin/init
ចំណាំ៖ ដើម្បីត្រឡប់ទៅការកំណត់ដំបូងវិញ សូមប្រើពាក្យបញ្ជាខាងក្រោម។
$ ln -sf /lib/systemd/systemd /sbin/init - ចាប់ផ្ដើមបន្ទះឡើងវិញ ហើយពិនិត្យមើលកំណត់ហេតុខឺណែល។ ការស្វែងរកខ្សែអក្សរ "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 |
- CONFIG_DEBUG_KERNEL ត្រូវបានបិទ ដែលបណ្តាលឱ្យទំហំរូបភាពខឺណែលតូចជាង => បន្ថយការផ្ទុករូបភាពខឺណែល។
- សារកំណត់ហេតុខឺណែលត្រូវបានបង្ក្រាបដោយប្រើស្ងាត់។
- 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 ការចែកចាយឡើងវិញ និងការប្រើប្រាស់ក្នុងទម្រង់ប្រភព និងប្រព័ន្ធគោលពីរ ដោយមានឬគ្មានការកែប្រែ ត្រូវបានអនុញ្ញាត ផ្តល់លក្ខខណ្ឌដូចខាងក្រោមត្រូវបានបំពេញ៖
- ការចែកចាយឡើងវិញនៃកូដប្រភពត្រូវតែរក្សាការជូនដំណឹងអំពីការរក្សាសិទ្ធិខាងលើ បញ្ជីលក្ខខណ្ឌ និងការបដិសេធខាងក្រោម។
- ការចែកចាយឡើងវិញក្នុងទម្រង់គោលពីរត្រូវតែបង្កើតឡើងវិញនូវការជូនដំណឹងអំពីការរក្សាសិទ្ធិខាងលើ បញ្ជីនៃលក្ខខណ្ឌនេះ និងការបដិសេធខាងក្រោមនៅក្នុងឯកសារ និង/ឬសម្ភារៈផ្សេងទៀតដែលបានផ្តល់ជាមួយនឹងការចែកចាយ។
- ទាំងឈ្មោះអ្នករក្សាសិទ្ធិនិងឈ្មោះអ្នកចូលរួមរបស់វាមិនអាចត្រូវបានប្រើដើម្បីគាំទ្រឬផ្សព្វផ្សាយផលិតផលដែលបានមកពីកម្មវិធីនេះដោយគ្មានការអនុញ្ញាតជាលាយលក្ខណ៍អក្សរជាមុន។
កម្មវិធីនេះត្រូវបានផ្តល់ដោយអ្នកកាន់កាប់សិទ្ធិអ្នកនិពន្ធ និងអ្នករួមចំណែក "ដូចដែលមាន" និងណាមួយ
ការធានាដោយប្រយោល ឬការធានាដោយប្រយោល រួមទាំង ប៉ុន្តែមិនកំណត់ចំពោះ ការធានាដោយអត្ថន័យនៃការលក់ដូរ និងសមភាពសម្រាប់គោលបំណងពិសេសមួយត្រូវបានបដិសេធ។ ក្នុងករណីណាក៏ដោយ អ្នកកាន់កាប់សិទ្ធិថតចម្លង ឬអ្នករួមចំណែកត្រូវទទួលខុសត្រូវចំពោះការខូចខាតដោយផ្ទាល់ ប្រយោល ឧប្បត្តិហេតុ ពិសេស គំរូ ឬការខូចខាតជាផលវិបាក (រួមទាំង ប៉ុន្តែមិនកំណត់ចំពោះការខូចខាត ការប្រើប្រាស់នីតិវិធី ទិន្នន័យ ឬប្រាក់ចំណេញ; ឬការរំខានអាជីវកម្ម) ទោះបីជាបណ្តាលមកពី និងលើទ្រឹស្ដីទំនួលខុសត្រូវណាមួយ ទោះជានៅក្នុងកិច្ចសន្យា ទំនួលខុសត្រូវយ៉ាងតឹងរ៉ឹង ឬទារុណកម្ម (រួមទាំងការធ្វេសប្រហែស ឬបើមិនដូច្នេះទេ) ដែលកើតឡើងនៅក្នុងវិធីណាក៏ដោយ នៃការប្រើប្រាស់នៅពេលនោះ ភាពងាយរងគ្រោះនៃការខូចខាតបែបនេះ។
ប្រវត្តិនៃការពិនិត្យឡើងវិញ
តារាង 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 |