TQMa93 Secure Boot

ព័ត៌មានអំពីផលិតផល
លក្ខណៈបច្ចេកទេស
- ម៉ូដែល: TQMa93xx
- ប្រព័ន្ធប្រតិបត្តិការ៖ លីនុច (អ៊ូប៊ុនទូ ២២.០៤)
- មុខងារសុវត្ថិភាព៖ ការចាប់ផ្ដើមសុវត្ថិភាព
ការយកចិត្តទុកដាក់៖ Fuses (One Time Programmable) ត្រូវបានកំណត់នៅក្នុងរបៀបនេះ ដំណើរការនេះគឺមិនអាចត្រឡប់វិញបានទេ។ ដូច្នេះវាត្រូវបានផ្ដល់អនុសាសន៍យ៉ាងខ្លាំងឱ្យប្រើលំនាំអភិវឌ្ឍន៍សម្រាប់ការណែនាំនេះ។
នីតិវិធី
មគ្គុទ្ទេសក៍នេះពន្យល់ពីរបៀបដែលខ្សែសង្វាក់នៃការជឿទុកចិត្តអាចត្រូវបានបង្កើតឡើងពីកម្មវិធីចាប់ផ្ដើមប្រព័ន្ធតាមរយៈខឺណែលលីនុចទៅភាគថាសជា root ជាមួយ dm-verity ។
តារាងខាងក្រោមផ្តល់នូវការពិពណ៌នាសាមញ្ញនៃជំហានដែលពាក់ព័ន្ធនឹងការបង្កើតខ្សែសង្វាក់នៃការជឿទុកចិត្ត និងការផ្ទៀងផ្ទាត់ក្នុងអំឡុងពេលដំណើរការចាប់ផ្ដើម៖

ការរៀបចំ
គម្រោងខាងក្រោមត្រូវបានទាមទារដើម្បីបង្កើតស្ទ្រីមចាប់ផ្ដើមដែលបានចុះហត្ថលេខាសម្រាប់ TQMa93xx៖
- imx-mkimage៖ https://github.com/nxp-imx/imx-mkimage (ទាមទារ)
- ឧបករណ៍ចុះហត្ថលេខាលើកូដ NXP 3.4.x (ជាមួយគណនី NXP)៖ https://www.nxp.com/webapp/Download?colCode=IMX_CST_TOOL_NEW (ទាមទារ)
- TQ Yocto-កន្លែងធ្វើការ៖ https://github.com/tq-systems/ci-meta-tq (បានណែនាំ)
bootstream សម្រាប់ TQMa93xx មានវត្ថុបុរាណជាច្រើន។ ដើម្បីទទួលបានវត្ថុបុរាណទាំងអស់នេះពីប្រភពតែមួយ វាត្រូវបានណែនាំឱ្យប្រើកន្លែងធ្វើការ TQ Yocto ci-meta-tq ។ ការណែនាំដែលរួមបញ្ចូលនៅទីនោះអាចត្រូវបានអនុវត្តតាមដើម្បីបង្កើតរូបភាពពេញលេញ (tq-image-weston-debug ឬ tq-image-generic-debug) សម្រាប់ឧបករណ៍មួយក្នុងចំណោមឧបករណ៍ដែលមានមូលដ្ឋានលើ TQMa93xx ខាងក្រោម៖
- tqma93xx-mba91xxca.conf
- tqma93xx-mba93xxca.conf
- tqma93xxla-mba93xxla.conf
ការយកចិត្តទុកដាក់៖ ដើម្បីបង្កើត U-Boot ជាមួយនឹងមុខងារចាប់ផ្ដើមសុវត្ថិភាព (AHAB) បន្ទាត់ខាងក្រោមត្រូវតែបន្ថែមទៅ local.conf៖
DISTRO_FEATURES៖ បន្ថែម = "សុវត្ថិភាព"
បន្ទាប់មក ស្ទ្រីមចាប់ផ្ដើមត្រូវតែបង្កើតឡើងវិញ៖
$ bitbake imx-boot
កន្លែងធ្វើការ TQ Yocto ក៏អាចត្រូវបានប្រើដើម្បីបង្កើតរូបភាពនៃខ្សែសង្វាក់នៃការជឿទុកចិត្តពេញលេញដែលបានបង្ហាញនៅទីនេះ។ ការកំណត់ដែលត្រូវការសម្រាប់ការនេះត្រូវបានពិពណ៌នានៅក្នុងផ្នែក 5.2 ។
ប្រភពសម្រាប់ខឺណែលលីនុច និង U-Boot គឺស្រេចចិត្ត ប៉ុន្តែត្រូវបានណែនាំ។ ពួកគេអាចទាញយកបានពី Github៖
- លីនុច៖ https://github.com/tq-systems/linux-tqmaxx/tree/TQMa-fslc-6.6-2.0.x-imx
- U-Boot៖ https://github.com/tq-systems/u-boot-tqmaxx/tree/TQM-lf_v2023.04
- Linux និង U-Boot គួរតែត្រូវបានចងក្រងរួចហើយសម្រាប់បំរែបំរួលនៃ TQMa93xx ក្នុងការរៀបចំ។
យូ-ប៊ូត
ការបង្កើតសោ
ការចុះហត្ថលេខា និងការផ្ទៀងផ្ទាត់ស្ទ្រីមចាប់ផ្ដើមត្រូវបានអនុវត្តដោយប្រើហេដ្ឋារចនាសម្ព័ន្ធសោសាធារណៈ (PKI) ។ ប្រសិនបើមិនទាន់មានទេ ឧបករណ៍ចុះហត្ថលេខាកូដអាចត្រូវបានប្រើដើម្បីបង្កើត PKI ដែលសមរម្យ។ CST 3.4.x គឺជាបណ្ណសារ tar.gz ដែលគ្រាន់តែត្រូវការខ្ចប់ប៉ុណ្ណោះ។ មិនចាំបាច់ដំឡើងបន្ថែមទៀតទេ។ ជំហានខាងក្រោមអាចត្រូវបានប្រើដើម្បីបង្កើត sample keys សម្រាប់ការណែនាំនេះ៖
ការយកចិត្តទុកដាក់៖ ផ្លូវគឺទាក់ទងទៅនឹងថតដែលបានស្រង់ចេញពីប័ណ្ណសារ។
- បញ្ចូលលេខសៀរៀលនៃវិញ្ញាបនបត្រដំបូងក្នុងគ្រាប់ចុច/សៀរៀល (file ត្រូវតែបង្កើត): 12345678
- បញ្ចូលឃ្លាសម្ងាត់ពីរដងក្នុង keys/key_pass.txt (file ត្រូវតែបង្កើត)៖
my_passphrase my_passphrase - បង្កើតមែកធាង PKI៖
$ keys/ahab_pki_tree.sh -existing-ca n -kt ecc -kl p521 -da sha512 -duration 10 -srk-ca n
សម្រាប់ការពន្យល់អំពីជម្រើស សូមមើលការណែនាំអ្នកប្រើប្រាស់ដែលមាននៅក្នុង CST (នៅក្នុងថតរងឯកសារ) ឬជម្រើស –help នៃស្គ្រីបខាងលើ។
ម្យ៉ាងវិញទៀត ស្គ្រីបក៏អាចត្រូវបានគេហៅថាដោយគ្មានជម្រើស និងកំណត់រចនាសម្ព័ន្ធក្នុងរបៀបអន្តរកម្ម។
ស្គ្រីបបង្កើតកូនសោក្នុងសោ/ និងវិញ្ញាបនបត្រក្នុង crts/ ។ - បង្កើតតារាង SRK និងតារាង SRK hash៖
$linux64/bin/srktool -a -s sha512 -d sha256 -t SRK_1_2_3_4_table.bin \
-e SRK_1_2_3_4_fuse.bin -f 1 -c
crts/SRK1_sha512_secp521r1_v3_usr_crt.pem,crts/SRK2_sha512_secp521r1_v3_usr_crt. pem,crts/SRK3_sha512_secp521r1_v3_usr_crt.pem,crts/SRK4_sha512_secp521r1_v3_usr_ crt.pem - សរសេរតារាង SRK hash នៅក្នុង fuses៖
យកចិត្តទុកដាក់៖ ជំហាននេះគឺអាចធ្វើទៅបានតែម្តងគត់ ហើយមិនអាចត្រឡប់វិញបានទេ។ តម្លៃខាងក្រោមគឺមានតែ examples និងត្រូវតែត្រូវបានជំនួសដោយតម្លៃផ្ទាល់ខ្លួនរបស់អ្នក។- បង្ហាញសញ្ញាសម្គាល់៖
$ hexdump -e '/4 “0x”' -e '/4 “%X””\n”' SRK_1_2_3_4_fuse.bin
0x00000000
0x11111111
0x22222222
0x33333333
0x44444444
0x55555555
0x66666666
0x77777777 - សរសេរសញ្ញាក្នុង fuses (TQMa93xx U-Boot)៖
=> fuse prog 16 0 0x00000000
=> fuse prog 16 1 0x11111111
=> fuse prog 16 2 0x22222222
=> fuse prog 16 3 0x33333333
=> fuse prog 16 4 0x44444444
=> fuse prog 16 5 0x55555555
=> fuse prog 16 6 0x66666666
=> fuse prog 16 7 0x77777777
- បង្ហាញសញ្ញាសម្គាល់៖
ការបង្កើតស្ទ្រីមចាប់ផ្ដើមដែលបានចុះហត្ថលេខា
U-Boot Proper និង ATF
- ចម្លងតាមតម្រូវការ files (ការស្ថាបនារូបភាព TQ ដោយជោគជ័យ សូមមើលខាងលើ ឬប្រភព U-Boot ត្រូវបានសន្មត់ថា៖
- កម្មវិធីបង្កប់ដែលជឿទុកចិត្តរបស់ ARM៖ ${DEPLOY_DIR_IMAGE}/bl31-imx93.bin ប្តូរឈ្មោះទៅជា bl31.bin
- U-Boot ត្រឹមត្រូវ៖
${DEPLOY_DIR_IMAGE}/u-boot.bin
នេះ។ file គឺជាតំណ ដូច្នេះចម្លងវាជាមួយ cp –-dereference ឬបង្ហាញ ហើយចម្លងដើម file ជាមួយ ls --long
or
ពីប្រភព U-Boot ដែលចងក្រងដោយខ្លួនឯង។
ទាំងនេះ files ត្រូវតែចម្លងទៅ imx-mkimage/iMX9/ ។ imx-mkimage អាចទទួលបានពីឃ្លាំង Github ដែលបានរៀបរាប់ខាងលើ មិនចាំបាច់ដំឡើងទេ។
- បង្កើតកុងតឺន័រជាមួយ U-Boot Proper និង ATF (ប្រតិបត្តិក្នុងថតឯកសារ imx-mkimage)៖
$ make SOC=iMX9 REV=A1 u-boot-atf-container.img រួមបញ្ចូល autobuild.mak- …
- CST៖ CONTAINER 0 អុហ្វសិត៖ 0x0
- CST: CONTAINER 0: Signature Block: offset គឺនៅ 0x110
- អុហ្វសិត = 0x0 0x110
- រួចរាល់។
- ចំណាំ៖ សូមចម្លងរូបភាពទៅអុហ្វសិត៖ IVT_OFFSET + IMAGE_OFFSET
យកចិត្តទុកដាក់៖ អុហ្វសិតសម្រាប់កុងតឺន័រ និងប្លុកហត្ថលេខាត្រូវបានទាមទារនៅជំហានបន្ទាប់។ - បន្ទាប់មកវត្ថុបុរាណ imx-mkimage/iMX9/u-boot-atf-container.img ត្រូវតែត្រូវបានចម្លងទៅថត CST ដែលបានពន្លានៅក្នុងជំហាន “3.1 ការបង្កើតកូនសោ”។
- ផ្ទេរអុហ្វសិតនៃកុងតឺន័រ និងប្លុកហត្ថលេខាទៅលំដាប់ពាក្យបញ្ជា File (CSF)៖
- [បឋមកថា]
- គោលដៅ = AHAB
- កំណែ = 1.0
- [ដំឡើង SRK]
- File = “SRK_1_2_3_4_table.bin”
- Source = “crts/SRK1_sha512_secp521r1_v3_usr_crt.pem”
- សន្ទស្សន៍ប្រភព = 0
- សំណុំប្រភព = OEM
- ការដកហូត = 0x0
- [ការផ្ទៀងផ្ទាត់ទិន្នន័យ]
- File = "u-boot-atf-container.img"
- អុហ្វសិត = 0x0 0x110
- CSF ផ្អែកលើ៖ https://github.com/nxp-imx/uboot-imx/blob/lf_v2024.04/doc/imx/ahab/csf_examples/csf_uboot_atf.txt
- CSF ក៏ត្រូវបានរក្សាទុកនៅក្នុងថត CST ដែលមានឈ្មោះ csf_uboot_atf.txt ដែលត្រូវបានពន្លានៅក្នុងជំហាន "3.1 ការបង្កើតកូនសោ"។
- ចុះហត្ថលេខាលើកុងតឺន័រ (ផ្លូវទាក់ទងទៅនឹងថត CST)៖
$linux64/bin/cst -i csf_uboot_atf.txt -o signed-u-boot-atf-container.img បន្ទាប់មកកុងតឺន័រដែលបានចុះហត្ថលេខាត្រូវតែត្រូវបានចម្លងត្រឡប់ទៅ imx-mkimage/iMX9/u-boot-atf-container.img ។ ចំណាំការប្តូរឈ្មោះទៅជា u-boot-atf-container.img ។
បញ្ចប់ស្ទ្រីមចាប់ផ្ដើម
- ចម្លងតាមតម្រូវការ files (ការស្ថាបនារូបភាព TQ ដោយជោគជ័យ សូមមើលខាងលើ ឬប្រភព U-Boot ត្រូវបានសន្មត់ថា៖
- Edgelock Secure Enclave Firmware៖ ${DEPLOY_DIR_IMAGE}/mx93a1-ahab-container.img
- កម្មវិធីបង្កប់ RAM៖ ${DEPLOY_DIR_IMAGE}/lpddr4*.bin
- U-Boot SPL៖
${DEPLOY_DIR_IMAGE}/u-boot-spl.bin
នេះ។ file គឺជាតំណ ដូច្នេះចម្លងវាជាមួយ cp –-dereference ឬបង្ហាញ ហើយចម្លងដើម file ជាមួយ ls --long
or
ពីប្រភព U-Boot ដែលចងក្រងដោយខ្លួនឯង។ - បានចុះហត្ថលេខាលើកុងតឺន័រជាមួយ U-Boot Proper និង ATF ពីជំហាន "3.2.1 U-Boot Proper និង ATF"
ទាំងនេះ files ក៏ត្រូវតែចម្លងទៅ imx-mkimage/iMX9/ ។
- បង្កើត bootstream
- $ make -j8 SOC=iMX9 REV=A1 flash_singleboot
រួមបញ្ចូល autobuild.mak - …
- CST៖ CONTAINER 0 អុហ្វសិត៖ 0x400
- CST: CONTAINER 0: Signature Block: offset គឺនៅ 0x490
- អុហ្វសិត = 0x400 0x490
- រួចរាល់។
- ចំណាំ៖ សូមចម្លងរូបភាពទៅអុហ្វសិត៖ IVT_OFFSET + IMAGE_OFFSET បន្ថែម u-boot-atf-container.img នៅ 379 KB, psize=1024
- 1145+0 កំណត់ត្រានៅក្នុង
- 1145+0 កត់ត្រាចេញ
- 1172480 បៃ (1.2 MB, 1.1 MiB) បានចម្លង, 0.00266906 s, 439 MB/s
- ការយកចិត្តទុកដាក់៖ អុហ្វសិតសម្រាប់កុងតឺន័រ និងប្លុកហត្ថលេខាត្រូវបានទាមទារនៅជំហានបន្ទាប់។
បន្ទាប់មកវត្ថុបុរាណ imx-mkimage/iMX9/flash.bin ត្រូវតែត្រូវបានចម្លងទៅថត CST ដែលបានពន្លានៅក្នុងជំហាន "3.1 ការបង្កើតកូនសោ" ។
- $ make -j8 SOC=iMX9 REV=A1 flash_singleboot
- ផ្ទេរអុហ្វសិតនៃកុងតឺន័រ និងប្លុកហត្ថលេខាទៅលំដាប់ពាក្យបញ្ជា File (CSF)៖
- [បឋមកថា]
- គោលដៅ = AHAB
- កំណែ = 1.0
- [ដំឡើង SRK]
- File = “SRK_1_2_3_4_table.bin”
- Source = “crts/SRK1_sha512_secp521r1_v3_usr_crt.pem”
- សន្ទស្សន៍ប្រភព = 0
- សំណុំប្រភព = OEM
- ការដកហូត = 0x0
- [ការផ្ទៀងផ្ទាត់ទិន្នន័យ]
- File = “flash.bin”
- អុហ្វសិត = 0x400 0x490
- CSF ផ្អែកលើ៖ https://github.com/nxp-imx/uboot-imx/blob/lf_v2024.04/doc/imx/ahab/csf_examples/csf_boot_image.txt
- CSF ត្រូវបានរក្សាទុកក្នុងថត CST ដែលមានឈ្មោះ csf_boot_image.txt ពន្លានៅក្នុងជំហាន "3.1 ការបង្កើតកូនសោ"។
- ចុះហត្ថលេខាលើ bootstream
- linux64/bin/cst -i csf_boot_image.txt -o signed-flash.bin
ជំហានសម្រាប់ការជំនួសស្ទ្រីមចាប់ផ្ដើមអាចរកបាននៅក្នុងស្រទាប់ BSP (https://github.com/tq-systems/meta-tq) ក្រោម meta-tq/doc ។
ការផ្ទៀងផ្ទាត់
ដើម្បីពិនិត្យមើលថាតើស្ទ្រីមចាប់ផ្ដើមដែលបានចុះហត្ថលេខាត្រឹមត្រូវឬអត់ ប្រើពាក្យបញ្ជា ahab_status ក្នុង U-Boot៖
- => ahab_status
- វដ្តជីវិត៖ 0x00000008, OEM បើក
- រកមិនឃើញព្រឹត្តិការណ៍ទេ!
- ប្រសិនបើរកឃើញព្រឹត្តិការណ៍មួយ ស្ទ្រីមចាប់ផ្ដើមមិនត្រឹមត្រូវ ហើយនឹងមិនអាចចាប់ផ្ដើមនៅលើឧបករណ៍ចាក់សោបានទេ។
សម្រាប់ការក្លែងបន្លំ bootstream ដែលមិនចុះហត្ថលេខាអាចត្រូវបានចាប់ផ្តើមហើយបន្ទាប់មក ahab_status អាចត្រូវបានគេហៅថា:
- => ahab_status
- វដ្តជីវិត៖ 0x00000008, OEM បើក
- 0x0287fad6
- IPC = MU APD (0x2)
- CMD = ELE_OEM_CNTN_AUTH_REQ (0x87)
- IND = ELE_BAD_KEY_HASH_FAILURE_IND (0xFA)
- STA = ELE_SUCCESS_IND (0xD6)
- 0x0287fad6
- IPC = MU APD (0x2)
- CMD = ELE_OEM_CNTN_AUTH_REQ (0x87)
- IND = ELE_BAD_KEY_HASH_FAILURE_IND (0xFA)
- STA = ELE_SUCCESS_IND (0xD6)
ចាក់សោឧបករណ៍
ការយកចិត្តទុកដាក់៖ ជំហាននេះគឺមិនអាចត្រឡប់វិញបានទេ ហើយគួរតែត្រូវបានអនុវត្តតែក្នុងករណីចាំបាច់ប៉ុណ្ណោះ។ ប្រសិនបើការកំណត់មិនត្រឹមត្រូវ ជំហាននេះនឹងបណ្តាលឱ្យឧបករណ៍មិនអាចប្រើបាន។
ឧបករណ៍អាចត្រូវបានចាក់សោនៅក្នុង U-Boot ដោយប្រើពាក្យបញ្ជា ahab_close ។ នេះមានន័យថាមានតែស្ទ្រីមចាប់ផ្ដើមត្រឹមត្រូវដែលត្រូវបានផ្ទៀងផ្ទាត់ដោយ Boot ROM ប៉ុណ្ណោះដែលនឹងចាប់ផ្ដើម។ ស្ថានភាពខាងក្រោមត្រូវបានបង្ហាញបន្ទាប់ពីចាប់ផ្តើមឡើងវិញ៖
- => ahab_status
- វដ្តជីវិត៖ 0x00000020, OEM បានបិទ
- រកមិនឃើញព្រឹត្តិការណ៍ទេ!
FIT-រូបភាព
ការយកចិត្តទុកដាក់៖ ព័ត៌មានផ្លូវគឺទាក់ទងទៅនឹងថតទទេថ្មី ឧ
fit_image_work ឬប្រភពខឺណែល ប្រសិនបើចងក្រងដោយខ្លួនឯង។ តទៅនេះហៅថា ថតការងារ។
ការបង្កើតគូគន្លឹះ
គូសោ asymmetric ត្រូវបានប្រើដើម្បីចុះហត្ថលេខាលើរូបភាព FIT ។ គូបែបនេះអាចត្រូវបានបង្កើតជាមួយ OpenSSL៖
$ openssl genpkey -algorithm RSA -out dev.key -pkeyopt rsa_keygen_bits: 2048
$ openssl req -batch -new -x509 -key dev.key -out dev.crt
បង្កើតប្រភពដើមឈើរូបភាព
- បង្កើតប្រភពមែកធាងរូបភាព sign.its សម្រាប់រូបភាព FIT ។
- /dts-v1/;
- / {
- description = “Kernel fitImage for TQMa93xx”;
- #address-cells = <1>;
- រូបភាព {
- ខឺណែល-1 {
- description = "ខឺណែលលីនុច";
- ទិន្នន័យ = /incbin/("រូបភាព");
- ប្រភេទ = "ខឺណែល";
- arch = "arm64";
- os = "លីនុច";
- ការបង្ហាប់ = "gzip";
- ផ្ទុក = <0x90000000>;
- ធាតុ = <0x90000000>;
- hash-1 {
- អាល់ហ្គោ = “sha256”;
- };
- };
- fdt-1 {
- description = “ផ្លុំដើមឈើឧបករណ៍រុញ”;
- ទិន្នន័យ = /incbin/(" ”);
- ប្រភេទ = “flat_dt”;
- arch = "arm64";
- ការបង្ហាប់ = "គ្មាន";
- ផ្ទុក = <0x97000000>;
- hash-1 {
- អាល់ហ្គោ = “sha256”;
- };
- };
- };
- ការកំណត់រចនាសម្ព័ន្ធ {
- លំនាំដើម = "conf-1";
- conf-1 {
- description = "ខឺណែលលីនុច, FDT blob";
- ខឺណែល = “ខឺណែល-១”;
- fdt = "fdt-1";
- hash-1 {
- អាល់ហ្គោ = “sha256”;
- };
- ហត្ថលេខា-1 {
- អាល់ហ្គោ = “sha256,rsa2048”;
- key-name-hint = "dev";
- padding = “pkcs-1.5”;
- sign-images = "ខឺណែល", "fdt";
- };
- };
- };
- };
បង្កើតរូបភាព FIT ដែលបានចុះហត្ថលេខា
ចំណាំ៖ ឧបករណ៍គោលពីរសម្រាប់ U-Boot ត្រូវបានទាមទារសម្រាប់ជំហាននេះ។ ឧបករណ៍គោលពីរដែលផលិតរួចរាល់អាចត្រូវបានរកឃើញនៅក្នុងកន្លែងធ្វើការ Yocto នៅក្នុងថតឯកសារ U-Boot build។ ផ្លូវទៅកាន់ថត build អាចត្រូវបានបង្ហាញជាមួយ bitbake virtual/bootloader –e | grep ^B= ។
- ចម្លងតាមតម្រូវការ files ចូលទៅក្នុងថតការងារ៖
- ប្តូរឈ្មោះ U-Boot devicetree imx93-tqma9352-mba91xxca.dtb, imx93-tqma9352-mba93xxca.dtb ឬ imx93-tqma9352-mba93xxla.dtb នៅក្នុង pubkey.dtb៖
ពី U-Boot build directory ក្នុង Yocto workspace (ផ្លូវ៖ bitbake virtual/bootloader –e | grep ^B=)
or
ពីប្រភព U-Boot ដែលចងក្រងដោយខ្លួនឯង។ - លីនុច-ខឺណែល៖
${DEPLOY_DIR_IMAGE}/រូបភាព
នេះ។ file គឺជាតំណ ដូច្នេះចម្លងវាជាមួយ cp –-dereference ឬបង្ហាញ ហើយចម្លងដើម file ជាមួយ ls --long
or
ពីប្រភពលីនុចដែលចងក្រងដោយខ្លួនឯង។ - មែកធាងឧបករណ៍លីនុច៖
អាស្រ័យលើវ៉ារ្យ៉ង់ ${DEPLOY_DIR_IMAGE}/imx93-tqma93…
នេះ។ file គឺជាតំណ ដូច្នេះចម្លងវាជាមួយ cp –-dereference ឬបង្ហាញ ហើយចម្លងដើម file ជាមួយ ls --long
or
ពីប្រភពលីនុចដែលចងក្រងដោយខ្លួនឯង។ - គ្រាប់ចុចដែលបានបង្កើតក្នុងជំហាន 4.1
- អាយធីអេស file បង្កើតក្នុងជំហានទី 4.2
- ប្តូរឈ្មោះ U-Boot devicetree imx93-tqma9352-mba91xxca.dtb, imx93-tqma9352-mba93xxca.dtb ឬ imx93-tqma9352-mba93xxla.dtb នៅក្នុង pubkey.dtb៖
- បង្កើតរូបភាព FIT ជាមួយហត្ថលេខា
$ mkimage -f sign.its -K pubkey.dtb -k ។ -r image.itb
សោសាធារណៈត្រូវបានសរសេរទៅកាន់ devicetree នៃ U-Boot ។ សោនេះត្រូវបានប្រើដើម្បីផ្ទៀងផ្ទាត់រូបភាព FIT ដែលបានចុះហត្ថលេខាខាងលើ។
ការយកចិត្តទុកដាក់៖ ដើម្បីខ្ចប់ U-Boot devicetree ជាមួយនឹងកូនសោសាធារណៈទៅក្នុង bootstream ដែលបានចុះហត្ថលេខាពីជំពូក 3.2 ជំហានពីជំពូក 3.2 ត្រូវតែធ្វើឡើងម្តងទៀតជាមួយនឹង U-Boot Proper u-boot.bin ដែលត្រូវបានប្ដូរតាមបំណង។ ដើម្បីធ្វើដូចនេះ devcietree ដែលមានសោសាធារណៈ pubkey.dtb ត្រូវតែបញ្ជាក់តាមរយៈជម្រើស EXT_DTB នៅពេលចងក្រង U-Boot៖
ធ្វើ EXT_DTB=
ការផ្ទៀងផ្ទាត់
នៅក្នុង U-Boot ដោយប្រើសោសាធារណៈ រូបភាព image.itb ដែលបានចុះហត្ថលេខា FIT អាចត្រូវបានចាប់ផ្ដើមដោយ bootm បន្ទាប់ពីវាត្រូវបានផ្ទុកពីឧបករណ៍ផ្ទុកដែលសមស្រប (TFTP, eMMC, SD)។
នៅពេលចាប់ផ្ដើមរូបភាព FIT U-Boot ត្រឡប់ព័ត៌មានផ្ទៀងផ្ទាត់ Hash Integrity … sha256,rsa2048:dev+ យល់ព្រមជាមួយនឹងឈ្មោះ ក្បួនដោះស្រាយ និងប្រវែងនៃកូនសោដែលបានបង្កើតក្នុងជំពូក 4.1 នៅលើកុងសូល៖
- ## កំពុងផ្ទុកខឺណែលពីរូបភាព FIT នៅ 80400000 …
… - ការផ្ទៀងផ្ទាត់ Hash Integrity … sha256,rsa2048:dev+ យល់ព្រម
… - ## កំពុងផ្ទុក ramdisk ពីរូបភាព FIT នៅ 80400000 …
… - ការផ្ទៀងផ្ទាត់ Hash Integrity … sha256,rsa2048:dev+ យល់ព្រម
… - ## កំពុងផ្ទុក fdt ពីរូបភាព FIT នៅ 80400000 …
… - ការផ្ទៀងផ្ទាត់ Hash Integrity … sha256,rsa2048:dev+ យល់ព្រម
…
សម្រាប់ការក្លែងបន្លំ គូគន្លឹះផ្សេងទៀតអាចត្រូវបានបង្កើតដូចដែលបានពិពណ៌នានៅក្នុងផ្នែក 4.1 ហើយត្រូវបានប្រើដើម្បីចុះហត្ថលេខាលើរូបភាព FIT ។ រូបភាព FIT នេះមិនអាចត្រូវបានចាប់ផ្ដើមដោយមិនចាំបាច់ផ្លាស់ប្តូរសោនៅក្នុង U-Boot Devicetree៖
## កំពុងផ្ទុកខឺណែលពីរូបភាព FIT នៅ 80400000 …
ដោយប្រើការកំណត់ 'conf-1'
ការផ្ទៀងផ្ទាត់ Hash Integrity … sha256,rsa2048:test- error!
ការផ្ទៀងផ្ទាត់បានបរាជ័យសម្រាប់ ' 'ថ្នាំង hash នៅក្នុង 'conf-1' node config
បរាជ័យក្នុងការផ្ទៀងផ្ទាត់ហត្ថលេខាដែលត្រូវការ 'key-dev'
ហាសទិន្នន័យមិនល្អ
កំហុស៖ មិនអាចទទួលបានរូបភាពខឺណែល!
ពង្រីកខ្សែសង្វាក់នៃការជឿទុកចិត្ត៖ ភាគថាសឫស
ខ្សែសង្វាក់នៃការជឿទុកចិត្តដែលបានបង្កើតឡើងពីមុនផ្ទៀងផ្ទាត់ប្រភពដើមនៃខឺណែល U-Boot និងលីនុច។ ជាមួយនឹងយន្តការដែលបានរៀបរាប់ខាងលើ មានតែម្ចាស់សោឯកជនដែលបានបង្កើតប៉ុណ្ណោះដែលអាចចុះហត្ថលេខាលើកម្មវិធីរបស់គាត់ ហើយចាប់ផ្ដើមវានៅលើឧបករណ៍។ តំណភ្ជាប់បន្ថែមអាចត្រូវបានបន្ថែមទៅខ្សែសង្វាក់។ ផ្នែកខាងក្រោមរៀបរាប់អំពីរបៀបដែលភាគថាសជា root អាចត្រូវបានការពារប្រឆាំងនឹងឧបាយកលដោយប្រើ dm-verity ។ សម្រាប់ការអនុវត្តជាក់ស្តែង វាត្រូវបានបង្ហាញផងដែរពីរបៀបដែលខ្សែសង្វាក់ពេញលេញអាចត្រូវបានបង្កើតជាមួយ TQ-BSP ។ ការណែនាំជាជំហាន ៗ ចំពោះការការពារ dm-verity ត្រូវបានលុបចោល ដោយសារភាពស្មុគស្មាញនៃតម្រូវការ។
គំនូរព្រាង៖ កម្មវិធីបង្កើតឧបករណ៍ពិត
- បង្កើតលេខសម្គាល់ភាពពិត៖
veritysetup គណនាតម្លៃ hash និងរក្សាទុកពួកវានៅចុងបញ្ចប់នៃភាគថាសឫស។ ការបែងចែកជា root អាចក្លាយជាការពិត file ឬឧបករណ៍ទប់ស្កាត់ file (ឧទាហរណ៍ /dev/sdaX) ។- ការកំណត់ភាពត្រឹមត្រូវ \
- –data-block-size=1024 \\
- –hash-block-size=4096 \\
- -hash-offset= \
- ទ្រង់ទ្រាយ \
- \
- veritysetup បញ្ចេញព័ត៌មានខាងក្រោម (ជាមួយនឹងតម្លៃខុសគ្នាដែលត្រូវគ្នា)៖
- ព័ត៌មានបឋមកថា VERITY សម្រាប់ data.img
- UUID: e06ff4cb-6b56-4ad4-bd97-0104505a70a5
- ប្រភេទ Hash៖ ១
- ប្លុកទិន្នន័យ៖ 204800
- ទំហំប្លុកទិន្នន័យ៖ ១០២៤
- ទំហំប្លុក Hash: 4096
- ក្បួនដោះស្រាយ hash: sha256
- Salt: 17328c48990b76fbb3e05d0ebfd236043674cf0d14c278bc875b42693621cc21
- Root hash: a0e1a449d452f74d041706b955794c0041e3d8ad051068df6589e08485323698
- root hash គឺជាតម្លៃរសើបដែលត្រូវការការពារ។ ប្រសិនបើ hash នេះត្រូវបានសម្របសម្រួល ឧទាហរណ៍ ប្រសិនបើវាអាចត្រូវបានផ្លាស់ប្តូរដោយអ្នកដែលគ្មានការអនុញ្ញាត នោះការការពារភាពសុចរិតនៃភាគថាសជា root ដោយ dm-verity គឺគ្មានតម្លៃទេ។
- បញ្ចូលឫសគល់ទៅក្នុងខ្សែសង្វាក់នៃការជឿទុកចិត្ត
- សញ្ញាឫសគល់ដែលបានបង្កើតខាងលើត្រូវបានរក្សាទុកក្នុងរូបភាព FIT ដែលបានចុះហត្ថលេខា ដែលការពារវាពីការក្លែងបន្លំ។ ចំពោះគោលបំណងនេះ initramfs ត្រូវបានបន្ថែមទៅរូបភាព FIT ដែលហាសជា root ត្រូវបានរក្សាទុកក្នុង file.
- ថ្នាំងរូបភាពរបស់ ITS file ពីជំពូក 4.2 ត្រូវបានពង្រីកដោយផ្នែកខាងក្រោម ក្នុងចំណោមផ្នែកផ្សេងទៀត៖
- ramdisk-1 {
- description = "dm-verity-image-initramfs";
- ទិន្នន័យ = /incbin/(" ”);
- ប្រភេទ = "ramdisk";
- arch = "arm64";
- os = "លីនុច";
- ការបង្ហាប់ = "គ្មាន";
- ផ្ទុក = <0x98000000>;
- ធាតុ = <0x98000000>;
- hash-1 {
- អាល់ហ្គោ = “sha256”;
- };
- };
- ពិនិត្យមើលភាពសុចរិតនៃភាគថាសជា root
- initramfs មានស្គ្រីបសមរម្យដែលបង្កើតឧបករណ៍គូសផែនទីពីភាគថាសឫស និងសញ្ញាឫស។
- ការកំណត់ភាពត្រឹមត្រូវ \
- –data-block-size=${DATA_BLOCK_SIZE} \\
- –hash-offset=${DATA_SIZE} \\
- បង្កើត rootfs \
- \
- \
បន្ទាប់មកឧបករណ៍គូសផែនទីត្រូវបានម៉ោន៖
- ម៉ោន \
- -o ro \
- /dev/mapper/rootfs \\
- / rootfs
ឫស fileប្រព័ន្ធគឺបានតែអាន។ ដើម្បីប្តូរទៅឫសពិតប្រាកដ fileប្រព័ន្ធ, ប្រើ switch-root ។
ការបង្កើតដោយស្វ័យប្រវត្តិជាមួយ TQ-BSP
ជាគោលការណ៍ រូបភាពដែលមានខ្សែសង្វាក់ទុកចិត្តពីកម្មវិធីចាប់ផ្ដើមប្រព័ន្ធទៅភាគថាសជា root អាចត្រូវបានបង្កើតដោយស្វ័យប្រវត្តិជាមួយ TQ-BSP ។
សម្រាប់ TQMa93xx ជម្រើសខាងក្រោមត្រូវបន្ថែមទៅ local.conf៖
- # ជម្រើសកំណត់រចនាសម្ព័ន្ធចាំបាច់សុវត្ថិភាព DISTRO_FEATURE សម្រាប់ U-Boot និង Kernel
- DISTRO_FEATURES៖ បន្ថែម = "សុវត្ថិភាព"
- # ឈ្មោះសោដែលប្រើសម្រាប់ចុះហត្ថលេខាលើកម្មវិធីចាប់ផ្ដើមប្រព័ន្ធ
- IMX_HAB_KEY_NAME = “ahab”
- # ធ្វើឱ្យការចុះហត្ថលេខាលើរូបភាព FIT សកម្មក្នុងដំណើរការសាងសង់
- UBOOT_SIGN_ENABLE = “1”
- # ថ្នាក់នេះមានតក្កវិជ្ជាសម្រាប់បង្កើតភាគថាសដែលបានការពារ
- IMAGE_CLASSES += “dm-verity-img”
- # ឈ្មោះរូបភាព initramfs សម្រាប់ការគ្រប់គ្រង dm-verity
- INITRAMFS_IMAGE = “dm-verity-image-initramfs”
- # Initramfs ត្រូវបានរក្សាទុកជាវត្ថុបុរាណដាច់ដោយឡែកនៅក្នុងរូបភាព
- INITRAMFS_IMAGE_BUNDLE = “0”
- # រក្សាទុករូបភាព FIT ជាមួយ initramfs នៅក្នុងភាគថាសចាប់ផ្ដើម
- IMAGE_BOOT_FILES:append = ” fitImage-${INITRAMFS_IMAGE}-${MACHINE}-
- ${MACHINE};fitImage" # រូបភាពដែលត្រូវការពារជាមួយ dm-verity
- # ជម្មើសជំនួស៖ tq-image-weston-debug
- DM_VERITY_IMAGE = “tq-image-generic-debug”
- # វាយគាត់ជាញឹកញាប់នៅលើរូបភាព
- DM_VERITY_IMAGE_TYPE = “ext4”
ការយកចិត្តទុកដាក់៖ ជម្រើសពិតប្រាកដអាចផ្លាស់ប្តូរនៅក្នុងកំណែ BSP នាពេលអនាគត។ ព័ត៌មានចុងក្រោយបំផុតអាចរកបាននៅក្នុងឯកសារស្រទាប់ BSP (https://github.com/tq-systems/meta-tq) ក្រោម meta-tq/doc ។
រូបភាពពេញលេញត្រូវបានបង្កើតជាមួយ bitbake tq-image-generic-debug ហើយបន្ទាប់មកអាចត្រូវបានសរសេរទៅកាត SD សម្រាប់ឧ។ampលេ
ការផ្ទៀងផ្ទាត់
នៅក្នុងលីនុច ម៉ោន -a អាចត្រូវបានប្រើដើម្បីពិនិត្យមើលថាតើ Verity Devicemapper ត្រូវបានម៉ោនជា root ឬអត់ fileប្រព័ន្ធ៖
- # ម៉ោន
- …
- /dev/mapper/rootfs បើក / វាយ ext4 (ro, relatime)
- …
- លើសពីនេះទៀតឫសទាំងមូល file ប្រព័ន្ធគឺបានតែអានក្នុងករណីនេះ៖
- # តេស្តប៉ះ
- ប៉ះ៖ មិនអាចប៉ះ 'សាកល្បង'៖ បានតែអាន file ប្រព័ន្ធ
ចំពោះការក្លែងបន្លំឫស file ប្រព័ន្ធអាចត្រូវបានកែប្រែដោយគ្មានអ៊ីនធឺណិត ហើយឧបករណ៍ចាប់ផ្តើមឡើងវិញ។ ការកែប្រែបណ្តាលឱ្យមានឫសគល់ផ្សេងគ្នា ហើយដំណើរការចាប់ផ្ដើមត្រូវបានបោះបង់៖ ឧបករណ៍-mapper: verity: 179:98: ប្លុកទិន្នន័យ 1 ត្រូវបានខូច
ព័ត៌មានបន្ថែមអំពី TQMa93xx អាចរកបាននៅក្នុង TQ Support Wiki៖ https://support.tq-group.com/en/arm/modules#nxp_imx_9_series
TQ-Systems GmbH
Mühlstraße 2 l Gut Delling l 82229 Seefeld Info@TQ-Group | TQ-ក្រុម
សំណួរដែលសួរញឹកញាប់
សំណួរ៖ តើវាអាចទៅរួចទេក្នុងការបញ្ច្រាសដំណើរការដែលមិនអាចត្រឡប់វិញនៃការកំណត់ Fuses ដែលបានរៀបរាប់នៅក្នុង How-to?
A: ទេ ការកំណត់ Fuses គឺមិនអាចត្រឡប់វិញបានទេ។ វាត្រូវបានណែនាំឱ្យប្រើលំនាំអភិវឌ្ឍន៍។
សំណួរ៖ តើខ្ញុំអាចស្វែងរកប្រភពដែលត្រូវការសម្រាប់ Linux និង U-Boot នៅឯណា?
ចម្លើយ៖ លីនុច៖
ឃ្លាំងលីនុច
U-Boot៖ យូ-ប៊ូត
ឃ្លាំង
ឯកសារ/ធនធាន
![]() |
TQ TQMa93 Secure Boot [pdf] ការណែនាំអ្នកប្រើប្រាស់ TQMa93xx, TQMa93 Secure Boot, Secure Boot, Boot |

