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
16
時の流れが許せない
Kernel/VM探検隊@北陸 Part 7 で発表した内容です。
KOBA789
May 11, 2025
Tweet
Share
More Decks by KOBA789
See All by KOBA789
ついに生産が終わったけどZ80でまだまだ遊びたい
koba789
5
4.2k
ISUCONの練習を楽しくたくさんやる方法
koba789
2
1.2k
Z80をRustで動かすまで年が越せない
koba789
0
190
ISUCON練習環境を最も簡単に用意する方法
koba789
2
3.2k
音をアレする
koba789
0
880
メガネとBluetooth Low Energyでお喋りする
koba789
0
1.6k
Rustでon-diskなB+Treeを作ったときの細かな話
koba789
11
1.8k
音の出るCPUを作っている途中
koba789
5
4.7k
自宅サーバーでbottlerocketを動かしてk8sクラスタを組む
koba789
1
1.2k
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
Gamification - CAS2011
davidbonilla
81
5.3k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
6
650
Six Lessons from altMBA
skipperchong
28
3.8k
Building Applications with DynamoDB
mza
95
6.4k
Become a Pro
speakerdeck
PRO
28
5.3k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Fireside Chat
paigeccino
37
3.5k
Adopting Sorbet at Scale
ufuk
76
9.4k
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 ʁʁʁ
λΠϜελϯϓ ΠϯλʔϑΣʔεΛ ഁյͯͭ͠Β͍ ʢਫ਼ӠʑΑΓͦΕ͕ͭΒ͍ʣ