Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
時の流れが許せない
Search
KOBA789
May 11, 2025
0
250
時の流れが許せない
Kernel/VM探検隊@北陸 Part 7 で発表した内容です。
KOBA789
May 11, 2025
Tweet
Share
More Decks by KOBA789
See All by KOBA789
直接メモリアクセス
koba789
0
340
人工衛星のファームウェアをRustで書く理由
koba789
16
9.5k
令和最新版手のひらコンピュータ
koba789
14
9k
ついに生産が終わったけどZ80でまだまだ遊びたい
koba789
5
4.6k
ISUCONの練習を楽しくたくさんやる方法
koba789
2
1.4k
Z80をRustで動かすまで年が越せない
koba789
0
370
ISUCON練習環境を最も簡単に用意する方法
koba789
2
3.3k
音をアレする
koba789
0
1k
メガネとBluetooth Low Energyでお喋りする
koba789
0
1.7k
Featured
See All Featured
WENDY [Excerpt]
tessaabrams
9
35k
The Spectacular Lies of Maps
axbom
PRO
1
420
Become a Pro
speakerdeck
PRO
31
5.8k
A better future with KSS
kneath
240
18k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
130
Are puppies a ranking factor?
jonoalderson
0
2.6k
Navigating Team Friction
lara
191
16k
How to train your dragon (web standard)
notwaldorf
97
6.5k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Building Adaptive Systems
keathley
44
2.9k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
420
Transcript
KOBA789 ࣌ͷྲྀΕ͕ڐͤͳ͍ ,FSOFM7.୳ݕୂ!1BSU
KOBA789 పͰ͔ͭ͘ΒंͰདྷ·ͨ͠ʢ৸ෆʣ w ࣄͷ͠·ͤΜ w ࣄͷ͠·ͤΜʢʣ w ͏͔ͬΓձࣾͷ1$Λ͖࣋ͬͯͨͷͰ͍ͭͷࣗݾհςϯϓϨʔτ͕ͳ͍
None
ಈ͘Α͏ʹͳΓ·ͨ͠ ΫϦελϧͷཪ໘ʹ৴߸ઢ͕௨ͬͯͯΫϩοΫ͕Ε͍ͯͨͷ͕ݪҼ
࣌ͷྲྀΕ͕ڐͤͳ͍
Έͳ͞Μͦ͏Ͱ͢Ͷʁ
ࢲͩͬͯͦ͏ͩ
ͭͷϚΠίϯͰ࣌ࠁΛಉظ͍ͨ͠ ΈΜͳେ͖6"35ͰλΠϜελϯϓΛૹΔ .$6 # .$6 " lz
ͭͷϚΠίϯͰ࣌ࠁΛಉظ͍ͨ͠ ΈΜͳେ͖6"35ͰλΠϜελϯϓΛૹΔ #ͷ࣌ܭ͕ͪΐͬͱ͚ͩΕΔ .$6 # .$6 " lz
ͭͷϚΠίϯͰ࣌ࠁΛಉظ͍ͨ͠ ΈΜͳେ͖6"35ͰλΠϜελϯϓΛૹΔ #ͷ࣌ܭ͕ͪΐͬͱ͚ͩΕΔ .$6 # .$6 " lz ͳ͔ͥʁ
6"35ͷΈ CBVEͳΒ#ZUFૹΔͷʹNT͔͔Δ https://vanhunteradams.com/Protocols/UART/UART.html <CJU><CJUT>˺<NT> ੨͍෦KOBA789ʹΑΔՃච
6"35ͷΈ #ZUFͷ࣌ࠁΛૹͬͨΒNTԆ͢Δ .$6# .$6" NT #ͷ࣌ܭ͕NTΕΔ
6"35ͷΈ #ZUFͷ࣌ࠁΛૹͬͨΒNTԆ͢Δ .$6# .$6" NT #ͷ࣌ܭ͕NTΕΔ NT
Ҿ͍ͨΒʁ
·͊Ԇ͕ίϯελϯτͳΒ ͦΕͰ͍͍ΜͰ͢Α
͕ͩࣄଶͦ͏୯७Ͱͳ͍
let time = gettimeofday(); send(time);
let time = gettimeofday(); send(time); ߦ͕࣮ߦ͞Ε͔ͯΒ ߦ͕࣮ߦ͞ΕΔ·ͰͷԆʁ
ߦͱߦͷؒʹ͋ΔԆ Α͋͘Γ͕ͪͳϚΠίϯͷ߹ w ී௨ʹ໋ྩ࣮ߦʹ͔͔ΔαΠΫϧ͚ͩԆ͢Δ w ༏ઌͷߴׂ͍ΓࠐΈ͕ೖΕԆ͢ΔʢཁΫϦςΟΧϧηΫγϣϯʣ w ࠷ۙͷϚΠίϯͰ w $16͕͍͗ͯ͢Ζ͍Ζ͕૬ରతʹ͍ͷͰΩϟογϡ͕͋Δ
w ΩϟογϡώοτPSOPUͰԆ͕࣌ؒมԽʢඇܾఆతʣ w 5$.ͱ͔͑ϚγʹͳΔ͕ w 0VUPG0SEFS࣮ߦ͢Δ w ίʔυಡΉ͚ͩͰԆ͕࣌ؒΘ͔Βͳ͍ʢࣄ্࣮ඇܾఆతʣ
let time = gettimeofday(); send(time);
let time = gettimeofday(); send(time); ͦͦTFOE ͷ࣮ʁ
Α͋͘Δ6"35ૹ৴ϖϦϑΣϥϧʢงғؾʣ ૹ৴'*'0 5%3 ͕ϝϞϦϚοϓ͞Ε͍ۭͯͯʹͳΔͱׂΓࠐΈ͕ೖΔ 4IJGU SFHJTUFS EFQUI '*'0 59 %"5"
όε $16 %"5" '*'0&NQUZ *OUFSSVQU 5%3
5%3ʹΛॻ͖ࠐΉͱૹ৴͞ΕΔ ͨͱ͑5%3ͷΞυϨεΛY@ͱ͢Δ *(uint32_t*)0x400001000 = 'A'; core::ptr::write_volatile(0x400001000 as *mut u8, b'A');
5%3ʹΛॻ͖ࠐΉͱૹ৴͞ΕΔ EFQUI'*'0ͳΒจࣈ·ͰҰؾʹॻ͚Δ͕ɺӽ͑ΔͱᷓΕΔ core::ptr::write_volatile(0x40000100 as *mut u8, b'0'); core::ptr::write_volatile(0x40000100 as *mut
u8, b'1'); core::ptr::write_volatile(0x40000100 as *mut u8, b'2'); core::ptr::write_volatile(0x40000100 as *mut u8, b'3'); core::ptr::write_volatile(0x40000100 as *mut u8, b'4'); core::ptr::write_volatile(0x40000100 as *mut u8, b'5'); core::ptr::write_volatile(0x40000100 as *mut u8, b'6'); core::ptr::write_volatile(0x40000100 as *mut u8, b'7'); core::ptr::write_volatile(0x40000100 as *mut u8, b'8'); core::ptr::write_volatile(0x40000100 as *mut u8, b'9'); core::ptr::write_volatile(0x40000100 as *mut u8, b'A'); core::ptr::write_volatile(0x40000100 as *mut u8, b'B'); core::ptr::write_volatile(0x40000100 as *mut u8, b'C'); core::ptr::write_volatile(0x40000100 as *mut u8, b'D'); core::ptr::write_volatile(0x40000100 as *mut u8, b'E'); core::ptr::write_volatile(0x40000100 as *mut u8, b’F'); // ͔͜͜ΒઌᷓΕΔ
Α͋͘Δ6"35υϥΠόʢงғؾʣ %."ͷ͜ͱҰ୴Ε͍ͯͩ͘͞ w TFOE w ·ͣ'*'0ͷۭ͖༰ྔ͚ͩॻ͘ w ᷓΕͨιϑτΣΞόοϑΝʹॻ͘ w
&NQUZ'*'0ׂΓࠐΈ w '*'0ͷۭ͖༰ྔ͚ͩιϑτΣΞόοϑΝ͔ΒҠ͢
͏͓͔ΓͰ͢Ͷʁ
όοϑΝɾ'*'0͕ ٧·ͬͯͨΒ ଈ࠲ʹૹ৴͞Εͳ͍ ʢͦΕͦ͏ʣ
ͯ͞
Α͋͘Δ6"35ड৴ϖϦϑΣϥϧʢงғؾʣ ड৴'*'0 3%3 ͕ϝϞϦϚοϓ͞Ε͍͕ͯͯདྷΔͱׂΓࠐΈ͕ೖΔ 4IJGU SFHJTUFS EFQUI '*'0 39 %"5"
όε $16 %"5" '*'0/PO&NQUZ *OUFSSVQU 3%3
3%3͔ΒΛಡΉͱ'*'0͔ΒQPQ͞ΕΔ ͨͱ͑3%3ͷΞυϨεΛY@ͱ͢Δ uint8_t r = *(uint32_t*)0x40000200; // r == 'A'
let r = core::ptr::read_volatile(0x40000100 as *const u8); // r == b’A'
Α͋͘Δ6"35υϥΠόʢงғؾʣ %."ͷ͜ͱҰ୴Ε͍ͯͩ͘͞ʢʣ w /POFNQUZ'*'0ׂΓࠐΈ w '*'0ͷ༰ΛιϑτΣΞόοϑΝʹҠ͢ w ͜ΕΛ͠ͳ͍ͱ'*'0༰қʹᷓΕΔ w SFDW
w ιϑτΣΞόοϑΝ͔ΒಡΈग़͢
ड৴σʔλͷಡΈऔΓ͍͘ΒͰԆ͢Δ ͏͓Θ͔ΓͰ͢Ͷʢʣ w ΞϓϦέʔγϣϯ͕ιϑτΣΞόοϑΝΛ͍ͭಡΉ͔ࣗ༝ w ׂΓࠐΈϋϯυϥ͕ݺΕΔλΠϛϯάʜʜʁ w ΞςʹͳΒͳ͍ w ผͷΫϦςΟΧϧηΫγϣϯͰεϐϯϩοΫͯͨ͠ΒΕΔ
w $PSUFY.ͰׂΓࠐΈͷԣऔΓͱ͔ͰϨΠςϯγ͕ζϨΔ
ࠔΔ
ࠔΔͷͰɺΑ͋͘Δํ๏ʢ6"35 114ʣ ඵ͝ͱʹύϧεΛೖྗ͠ɺͦΕΛϋʔυΣΞͰΩϟϓνϟ͢Δ .$6 # .$6 " lz ʮࠓͰ͢ʂʯ
*OQVU$BQUVSF0VUQVU$PNQBSF ΠέͯΔϚΠίϯͷλΠϚʹ͍͍ͩͨ͋Δ w *OQVU$BQUVSF w ύϧεೖྗΛτϦΨʔʹͯ͠ɺΧϯλͷΛϨδελʹΩϟϓνϟ w ιϑτΣΞͷλΠϛϯάʹґଘͤͣਖ਼֬ͳλΠϛϯά͕औΕΔ w (1*0ׂΓࠐΈͱશ͘ผͷػೳ
w 0VUQVU$PNQBSF w ΧϯλͷΛτϦΨʔʹͯ͠ɺύϧεΛग़ྗ w ιϑτΣΞͷλΠϛϯάʹґଘͤͣʢSZ
ΊͰͨ͠ΊͰͨ͠ʢʁʣ
ݪཧతʹཱ͍ͯ͠Δ͕ݱ࣮తʹࠔΔ 6"35࣌ࠁ৴ઐ༻Ͱͳ͍ɻଞͷίϚϯυૹΓ͍ͨ .$6 # .$6 " lz ʮࠓͰ͢ʂʯ $.%@%0@40.&5)*/( ࠞͬͯ͟͠·͏
6"35ʹྲྀΕΔσʔλΛผ͍ͨ͠ ͜ͷΜͷεϥΠυ͕Ͱ͖ͯͳ͍ w σʔλΛผ͢ΔʹϔομΛ͚Δͷ͕ৗखஈ w ϔομΛ͚Δʹύέοτࢦ͡Όͳ͍ͱ͍͚ͳ͍ w ͱ͜ΖͰ6"35ͨͩͷΕͷͳ͍όΠτετϦʔϜ w ύέοτʹ͢Δʹϓϩτίϧ͕ඞཁ
w ͔͠ඪ४Խ͞Εͯͳ͍ͱඍਖخ͘͠ͳ͍
͜ͷΜͷεϥΠυ͕Ͱ͖ͯͳ͍
͏݁ߦͧ͘
151 1SFDJTJPO5JNF1SPUPDPM &UIFSOFU্Ͱ/51ΑΓਫ਼ີͳ࣌ࠁಉظΛ͢Δϓϩτίϧ w ൃͱͯ͠/51ͱಉ͡ʢԟ෮ͰϨΠςϯγΛଌΔʣ w େ͖ͳҧ͍ϋʔυΣΞλΠϜελϯϓͷαϙʔτ w &UIFSOFUϑϨʔϜͷ4'%͕1):Λ௨աͨ͠ॠؒͷΧϯλͷΛ ϋʔυΣΞͰΩϟϓνϟ͢Δ
w ΑΓਫ਼ີʹϨΠςϯγ͕ଌΕΔͷͰVTʙOTΦʔμʔͷਫ਼͕ૂ͑Δ w ࣮ࡍʹͬͱ͍Ζ͍Ζ͋Δ͕ɺ͜͜ʹॻ͘ʹ४උ͕࣌ؒΒͳ͗͢͞Δ
151 1SFDJTJPO5JNF1SPUPDPM &UIFSOFU্Ͱ/51ΑΓਫ਼ີͳ࣌ࠁಉظΛ͢Δϓϩτίϧ .$6 # .$6 "
31J$.ͱळ݄ͷ(14ϞδϡʔϧͰ࡞ΕΔ ͜ͷهࣄಡΜͩΒ؆୯ʹ࡞ΕΔͱࢥ͏ https://www.je ff geerling.com/blog/2022/ptp-and-ieee-1588-hardware-timestamping-on-raspberry-pi-cm4
/VDMFP 45. ͰΕಈ͘ ୭151ͳΜͯͬͯͳ͍ͷͰؾ߹ೖΕ࣮ͯ͢Δඞཁ͋Δ
ͱͳΔͱؾʹͳΔ͜ͱ͕ ͋Γ·͢Ͷʁ
Ϣʔβʔϥϯυͷ"1* Ͳ͏ͳͬͯΜͩ
#4%TPDLFUʹ λΠϜελϯϓऔΔ"1*ͳ͍
·ͣTFUTPDLPQUͰઃఆ͢Δ https://docs.kernel.org/networking/timestamping.html#so-timestamping-also-so-timestamping-old-and-so-timestamping-new
·ͣTFUTPDLPQUͰઃఆ͢Δ https://docs.kernel.org/networking/timestamping.html#so-timestamping-also-so-timestamping-old-and-so-timestamping-new
·ͣTFUTPDLPQUͰઃఆ͢Δ https://docs.kernel.org/networking/timestamping.html#so-timestamping-also-so-timestamping-old-and-so-timestamping-new ΤϥʔΩϡʔʹ ใࠂ͞ΕΔ
·ͣTFUTPDLPQUͰઃఆ͢Δ https://docs.kernel.org/networking/timestamping.html#so-timestamping-also-so-timestamping-old-and-so-timestamping-new ʁʁʁ
λΠϜελϯϓ ΠϯλʔϑΣʔεΛ ഁյͯͭ͠Β͍ ʢਫ਼ӠʑΑΓͦΕ͕ͭΒ͍ʣ