និមិត្តសញ្ញា TQMa93

TQMa93 Secure Boot

TQMa93-Secure-Boot-ផលិតផល

ព័ត៌មានអំពីផលិតផល

លក្ខណៈបច្ចេកទេស

  • ម៉ូដែល: TQMa93xx
  • ប្រព័ន្ធប្រតិបត្តិការ៖ លីនុច (អ៊ូប៊ុនទូ ២២.០៤)
  • មុខងារសុវត្ថិភាព៖ ការចាប់ផ្ដើមសុវត្ថិភាព

ការយកចិត្តទុកដាក់៖ Fuses (One Time Programmable) ត្រូវបានកំណត់នៅក្នុងរបៀបនេះ ដំណើរការនេះគឺមិនអាចត្រឡប់វិញបានទេ។ ដូច្នេះវាត្រូវបានផ្ដល់អនុសាសន៍យ៉ាងខ្លាំងឱ្យប្រើលំនាំអភិវឌ្ឍន៍សម្រាប់ការណែនាំនេះ។

នីតិវិធី

មគ្គុទ្ទេសក៍នេះពន្យល់ពីរបៀបដែលខ្សែសង្វាក់នៃការជឿទុកចិត្តអាចត្រូវបានបង្កើតឡើងពីកម្មវិធីចាប់ផ្ដើមប្រព័ន្ធតាមរយៈខឺណែលលីនុចទៅភាគថាសជា root ជាមួយ dm-verity ។
តារាងខាងក្រោមផ្តល់នូវការពិពណ៌នាសាមញ្ញនៃជំហានដែលពាក់ព័ន្ធនឹងការបង្កើតខ្សែសង្វាក់នៃការជឿទុកចិត្ត និងការផ្ទៀងផ្ទាត់ក្នុងអំឡុងពេលដំណើរការចាប់ផ្ដើម៖

TQMa93-Secure-Boot-01

ការរៀបចំ

គម្រោងខាងក្រោមត្រូវបានទាមទារដើម្បីបង្កើតស្ទ្រីមចាប់ផ្ដើមដែលបានចុះហត្ថលេខាសម្រាប់ TQMa93xx៖

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៖

យូ-ប៊ូត

ការបង្កើតសោ
ការចុះហត្ថលេខា និងការផ្ទៀងផ្ទាត់ស្ទ្រីមចាប់ផ្ដើមត្រូវបានអនុវត្តដោយប្រើហេដ្ឋារចនាសម្ព័ន្ធសោសាធារណៈ (PKI) ។ ប្រសិនបើមិនទាន់មានទេ ឧបករណ៍ចុះហត្ថលេខាកូដអាចត្រូវបានប្រើដើម្បីបង្កើត PKI ដែលសមរម្យ។ CST 3.4.x គឺជាបណ្ណសារ tar.gz ដែលគ្រាន់តែត្រូវការខ្ចប់ប៉ុណ្ណោះ។ មិនចាំបាច់ដំឡើងបន្ថែមទៀតទេ។ ជំហានខាងក្រោមអាចត្រូវបានប្រើដើម្បីបង្កើត sample keys សម្រាប់ការណែនាំនេះ៖

ការយកចិត្តទុកដាក់៖ ផ្លូវគឺទាក់ទងទៅនឹងថតដែលបានស្រង់ចេញពីប័ណ្ណសារ។

  1. បញ្ចូលលេខសៀរៀលនៃវិញ្ញាបនបត្រដំបូងក្នុងគ្រាប់ចុច/សៀរៀល (file ត្រូវតែបង្កើត): 12345678
  2. បញ្ចូលឃ្លាសម្ងាត់ពីរដងក្នុង keys/key_pass.txt (file ត្រូវតែបង្កើត)៖
    my_passphrase my_passphrase
  3. បង្កើតមែកធាង PKI៖
    $ keys/ahab_pki_tree.sh -existing-ca n -kt ecc -kl p521 -da sha512 -duration 10 -srk-ca n
    សម្រាប់ការពន្យល់អំពីជម្រើស សូមមើលការណែនាំអ្នកប្រើប្រាស់ដែលមាននៅក្នុង CST (នៅក្នុងថតរងឯកសារ) ឬជម្រើស –help នៃស្គ្រីបខាងលើ។
    ម្យ៉ាងវិញទៀត ស្គ្រីបក៏អាចត្រូវបានគេហៅថាដោយគ្មានជម្រើស និងកំណត់រចនាសម្ព័ន្ធក្នុងរបៀបអន្តរកម្ម។
    ស្គ្រីបបង្កើតកូនសោក្នុងសោ/ និងវិញ្ញាបនបត្រក្នុង crts/ ។
  4. បង្កើតតារាង 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
  5. សរសេរតារាង 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

  1. ចម្លងតាមតម្រូវការ 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 ដែលបានរៀបរាប់ខាងលើ មិនចាំបាច់ដំឡើងទេ។
  2. បង្កើតកុងតឺន័រជាមួយ 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 ការបង្កើតកូនសោ”។
  3. ផ្ទេរអុហ្វសិតនៃកុងតឺន័រ និងប្លុកហត្ថលេខាទៅលំដាប់ពាក្យបញ្ជា 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 ការបង្កើតកូនសោ"។
  4. ចុះហត្ថលេខាលើកុងតឺន័រ (ផ្លូវទាក់ទងទៅនឹងថត 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 ។

 បញ្ចប់ស្ទ្រីមចាប់ផ្ដើម

  1. ចម្លងតាមតម្រូវការ 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/ ។
  2. បង្កើត 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 ការបង្កើតកូនសោ" ។
  3. ផ្ទេរអុហ្វសិតនៃកុងតឺន័រ និងប្លុកហត្ថលេខាទៅលំដាប់ពាក្យបញ្ជា 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 ការបង្កើតកូនសោ"។
  4. ចុះហត្ថលេខាលើ 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= ។

  1. ចម្លងតាមតម្រូវការ 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
  2. បង្កើតរូបភាព 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 ត្រូវបានលុបចោល ដោយសារភាពស្មុគស្មាញនៃតម្រូវការ។

 គំនូរព្រាង៖ កម្មវិធីបង្កើតឧបករណ៍ពិត

  1. បង្កើត​លេខ​សម្គាល់​ភាព​ពិត៖
    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 គឺគ្មានតម្លៃទេ។
  2. បញ្ចូលឫសគល់ទៅក្នុងខ្សែសង្វាក់នៃការជឿទុកចិត្ត
    • សញ្ញាឫសគល់ដែលបានបង្កើតខាងលើត្រូវបានរក្សាទុកក្នុងរូបភាព 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”;
    • };
    • };
  3. ពិនិត្យមើលភាពសុចរិតនៃភាគថាសជា 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

ឯកសារយោង

ទុកមតិយោបល់

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