OpenWRT рдХреЗ рд╕рд╛рде рдПрдХ рд░рд╛рдЙрдЯрд░ рд╕реЗ рдорд┐рдиреАрдХрдВрдкреНрдпреВрдЯрд░: рдПрдХ рдлреНрд░реЗрдордмрдлрд╝рд░ рдбреНрд░рд╛рдЗрд╡рд░ рд▓рд┐рдЦрдирд╛

рд╢реБрдн рджреЛрдкрд╣рд░, рдкреНрд░рд┐рдп Khabrovitesред рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рдЫреЛрдЯреЗ рд░реВрдЯрд░ рдХреЛ рдПрдХ рдорд┐рдиреАрдХрдВрдкреНрдпреВрдЯрд░ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреА рдореЗрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ - рдЕрдм рд╣рдо рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлреНрд░реЗрдордмрдлрд╝рд░ рдбреНрд░рд╛рдЗрд╡рд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЖрдкрдХреЛ рд░рд╛рдЙрдЯрд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рддрд╛рдХрд┐ рдЙрддреНрд╕рд╛рд╣ рдлреАрдХрд╛ рди рдкрдбрд╝реЗ, рдпрд╣рд╛рдБ рдЗрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╣реИ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕ рд╢рд╛рдирджрд╛рд░ рдкреБрд░рд╛рдиреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рдкрд╣рдЪрд╛рдиреЗрдВрдЧреЗ:

рдпрджрд┐ рдЖрдк рдкрд┐рдЫрд▓реЗ рднрд╛рдЧреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рд▓рд┐рдВрдХ рджрд┐рдП рдЧрдП рд╣реИрдВ:
1 - OpenWRT рдХреЗ рд╕рд╛рде рдПрдХ рд░рд╛рдЙрдЯрд░ рд╕реЗ рдорд┐рдиреАрдХрдВрдкреНрдпреВрдЯрд░: рдПрдХ рдпреВрдПрд╕рдмреА рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛
2 - OpenWRT рдХреЗ рд╕рд╛рде рдПрдХ рд░рд╛рдЙрдЯрд░ рд╕реЗ рдорд┐рдиреАрдХрдВрдкреНрдпреВрдЯрд░: рд╣рдо рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдпреВрдПрд╕рдмреА рдХреНрд▓рд╛рд╕-рдбреНрд░рд╛рдЗрд╡рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ
рддреЛ, рдЪрд▓реЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдкрд░рд┐рдЪрдп


рд╣рдорд╛рд░рд╛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдлрд░реНрдорд╡реЗрдпрд░ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдмрджрд▓реЗрдВрдЧреЗ), рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рд╣рдорд╛рд░рд╛ рдбреНрд░рд╛рдЗрд╡рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ, рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдХрдВрд╕реЛрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ рдпрд╛ рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ)ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд, рдорд╛рдирдХреАрдХреГрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рддрдерд╛рдХрдерд┐рдд рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдлреНрд░реЗрдордмрдлрд╝рд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдХрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╡рд░рдгрдХ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЗрд╕ рдмрд╛рд░ рдХреЗрд╡рд▓ рд╕рд╛рд░ "рдлрд╝рд╛рдЗрд▓ рд╕рдВрдЪрд╛рд▓рди" рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдерд╛ред рд╕рдВрдЪрд╛рд▓рди рднреА рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡рд┐рд╢реЗрд╖ рдХреЙрд▓рдмреИрдХ рднреА рд╣реЛрдВрдЧреЗ, рдЬреИрд╕реЗ рдХрд┐ fb_imageblit (рдЬрд┐рд╕реЗ рдЬрдм рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд╕реНрдХреНрд░реАрди рдкрд░ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд╛рди рдкрд░ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдмрд┐рдЯреНрд╕ рдХреЗ рдмреНрд▓реЙрдХ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ), fb_copyarea (рдПрдХ рд╕рдорд╛рди рд╕реНрдерд╛рдирд╛рдВрддрд░рдг, рд▓реЗрдХрд┐рди рдмрд┐рдЯреНрд╕ рдХрд╛ рдмреНрд▓реЙрдХ рдмрд╛рд╣рд░реА рдмрдлрд░ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА), рдЖрджрд┐ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдХреНрд░реАрди рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди, рд░рдВрдЧ рдмрд┐рдЯрдиреЗрд╕ рдФрд░ рдЗрд╕ "рдмрд┐рдЯрдиреЗрд╕" рдореЗрдВ рд░рдВрдЧ рдШрдЯрдХ рдХреИрд╕реЗ рд╕реНрдерд┐рдд рд╣реИрдВ, рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реЛрдВрдЧреАред

рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдЖрдкрдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╣рдж рддрдХ рдЧреИрд░-рдорд╛рдирдХ рд╕реНрдерд┐рддрд┐ рд╣реИ, рдЬрдм рдкреАрд╕реА рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдореНрдмреЗрдб рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИ) - рд╣рдорд╛рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдРрд╕реА рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдЗрд╕рдореЗрдВ рдореЗрдореЛрд░реА рд╣реИ, рдЙрд╕реА GRAM рдХреЛ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рдмреЙрд▓реНрд╕ рдореЗрдВ рдЫрд┐рдкрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ 16 рдмрд┐рдЯреНрд╕ рдХреА "рд╡рд┐рдВрдбреЛ" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдВрдЪ рд╣реИред рд╡рд╣рд╛рдБ рдкреВрд░реЗ рдлреНрд░реЗрдо рдмрдлрд░ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЛрд░реНрдб рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рдореЗрдореЛрд░реА рдирд╣реАрдВ рд╣реИред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд▓рд┐рдирдХреНрд╕ рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ - рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд╕рд░реНрдЧ " sys_ " рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рдЪреБрдХреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, " sys_imageblit ", рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдореБрдЦреНрдп рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдлреНрд░реЗрдо рдмрдлрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлрд╝реНрд░реЗрдо рдмрдлрд╝рд░ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдкрд░ рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕рдорд░реНрдерди рд╣реИ, рддреЛ рд╣рдо рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдмрд╕ рд▓реЛрд╣реЗ рдХреЗ рд╣рдорд╛рд░реЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдорд╛рд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХрдорд╛рдВрдб "рдмрд┐рдЯ рдмреНрд▓реЙрдХ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ" рдпрд╛ "рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ"ред
рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдЕрдкрдиреЗ рдлреНрд░реЗрдо рдмрдлрд╝рд░ рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдмрд░рд╛рдмрд░ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рд╣рдо рдЙрдкрд╕рд░реНрдЧ " sys_ " рдХреЗ рд╕рд╛рде рдЗрди рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд░реИрдо рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдлреНрд░реЗрдордмрдлрд╝рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рднреА рдмрд╛рддрдЪреАрдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ - рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕рд╛ рдбреНрд░рд╛рдЗрд╡рд░ рд╣реИ рдФрд░ рдЗрд╕реЗ vfb, рд╡рд░реНрдЪреБрдЕрд▓ рдлреНрд░реЗрдордмрдлрд╝рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб рдбреНрд░рд╛рдЗрд╡рд░ / рд╡реАрдбрд┐рдпреЛ / vfb.c.
рдпрджрд┐ рд╣рдо рдРрд╕реЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдЖрд╡рдзрд┐рдХ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлреНрд░реЗрдордмрдлрд╝рд░ рдбреНрд░рд╛рдЗрд╡рд░ рдорд┐рд▓реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЗрд╕рдореЗрдВ рдЙрддрд░реЗрдВ , рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдереЛрдбрд╝рд╛ рдЯреНрдпреВрди рдХрд░реЗрдВ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдбреНрд░рд╛рдЗрд╡рд░ рдкрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ, vfb ред

рдХрд░реНрдиреЗрд▓ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╕рдорд░реНрдерди рд╕рдХреНрд╖рдо рдХрд░реЗрдВ


рдореИрдВрдиреЗ рдЗрд╕ рднрд╛рдЧ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛, рдореБрдЦреНрдпрддрдГ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдбреНрд░рд╛рдЗрд╡рд░ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдерд╛, рдФрд░ рдлрд┐рд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдХрд╛рд▓реА рд╕реНрдХреНрд░реАрди рдХреНрдпреЛрдВ рдереА - рдореИрдВрдиреЗ рдХреЛрдб рдореЗрдВ рдЕрдкрдиреА рдЧрд▓рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рдк рдХрд┐рдпрд╛ред рдлрд┐рд░ рдЙрдиреНрд╣реЛрдВрдиреЗ VFB рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрд╕ рдореЗрдореЛрд░реА рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрдврд╝рд╛, рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрд╕реА рдмреНрд▓реИрдХ рд╕реНрдХреНрд░реАрди рдХреЛ рджреЗрдЦрд╛ рдерд╛ред рдлрд┐рд░, рдЖрдЦрд┐рд░рдХрд╛рд░, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдХрд┐ рдХрд░реНрдиреЗрд▓ рдиреЗ рдЦреБрдж рдХреЛ рдЗрд╕рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рдЬрд▓реНрджреА рд╣реЛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдмрд╛рддреЗрдВ рдкрд╣рд▓реЗред
  1. рдлреНрд░реЗрдордмрдлрд╝рд░ рдореЗрдореЛрд░реА рдореЗрдВ рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рд╕реНрдХреНрд░реАрди рдкрд░, рдЕрдЧрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ, рдЖрднрд╛рд╕реА рдирд╣реАрдВ рд╣реИ), рджреЛ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдпрд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдлреНрд░реЗрдордмрдлрд╝рд░ рдбреНрд░рд╛рдЗрд╡рд░ рд╣реИ, рдЬреЛ рдбрд┐рд╡рд╛рдЗрд╕ / рджреЗрд╡ / fb [x] рдФрд░ рдХрдВрд╕реЛрд▓ рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ fbcon рдбреНрд░рд╛рдЗрд╡рд░ рд╣реИ
  2. рдХрд░реНрдиреЗрд▓ рдореЗрдВ, рддрджрдиреБрд╕рд╛рд░, рдлрд╝реНрд░реЗрдордмрдлрд╝рд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди, рд╡рд░реНрдЪреБрдЕрд▓ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди (рдЖрдЙрдЯрдкреБрдЯ рдбрд┐рд╡рд╛рдЗрд╕ + рдЗрдирдкреБрдЯ рдбрд┐рд╡рд╛рдЗрд╕, рдбрд┐рд╕реНрдкреНрд▓реЗ рдФрд░ рдХреАрдмреЛрд░реНрдб рдХрд╛ рд╕рдВрдпреЛрдЬрди рдПрдХ рдЕрдореВрд░реНрдд) рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдРрд╕реЗ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдкрд░ рд╕рд┐рд╕реНрдЯрдо рдХрдВрд╕реЛрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди (рд╣рд╛рдБ, рдпрд╣ рдЕрдХреНрд╖рдо рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рд╕рд┐рд╕реНрдЯрдо рдХрдВрд╕реЛрд▓ рд╣реЛрдЧрд╛) рдХреЗрд╡рд▓ рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдореМрдЬреВрджрд╛ рдЪрд░рд┐рддреНрд░ рдЙрдкрдХрд░рдгреЛрдВ рдЬреИрд╕реЗ рдХреЙрдо рдкреЛрд░реНрдЯ), рд╕реНрд╡рдпрдВ fbcon рдбреНрд░рд╛рдЗрд╡рд░ , рд╕рд╛рде рд╣реА рдЗрд╕рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХреБрдЫ рдлреЛрдВрдЯ рдореЗрдВ рднреА рдЖрдЙрдЯрдкреБрдЯ рд╣реИ ред
  3. рд╡рд╣ рдмрд┐рдВрджреБ рдЬреЛ рдореБрдЭреЗ рд╢реБрд░реВ рдореЗрдВ рдпрд╛рдж рдЖ рдЧрдпрд╛ рдЬрдм рдореИрдВ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдХрд┐ рдХреБрдЫ рднреА рдХреНрдпреЛрдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдЖрдкрдХреЛ рдХрд░реНрдиреЗрд▓ рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХрдВрд╕реЛрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ / dev / tty [x] рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ fbcon рдХреЛ рдкрдХрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ !
    рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ fbcon рдбреНрд░рд╛рдЗрд╡рд░ рдкрд╣рд▓реЗ рдЙрдкрд▓рдмреНрдз / dev / tty [x] рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, tty0 ред рд▓реЗрдХрд┐рди рдХрд░реНрдиреЗрд▓ рд╡рд╣рд╛рдБ рдХреБрдЫ рднреА рдЙрддреНрдкрд╛рджрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рд╕рдВрд▓рдЧреНрди рдЕрдореВрд░реНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдирд╣реАрдВ рдЪрд▓рд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рди рд╣реА рд╕рд┐рд╕реНрдЯрдо рдХрдВрд╕реЛрд▓ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯред
    рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдХрд░реНрдиреЗрд▓ рдХреЛ рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдХрдВрд╕реЛрд▓ рдХреЛ / dev / tty0 рдкрд░ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рдЕрдЧрд░ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЕрдЪрд╛рдирдХ рдмреВрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрдЗрдЯрдо рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ), рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд рдпрд╣ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдкрдХреЛ рд▓реЙрдЧрд┐рди рдХреЗ рд▓рд┐рдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ


рдЕрдм рд╣рдо рд╡рд░реНрдЪреБрдЕрд▓ рдлреНрд░реЗрдордмрдлрд╝рд░ рдХреЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рддреАрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЬрдм рд╣рдореЗрдВ рдореЗрдореЛрд░реА рдореЗрдВ рдЪрд┐рддреНрд░ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛, рддреЛ рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд▓реЗрдЦрди рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗред fbcon рдФрд░ framebuffer рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдпрд╛ рддреЛ рд╕реНрдЯреЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рджреЛрдиреЛрдВ рдкреНрд▓рдЧ-рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╛ рдПрдХ рд╕реНрдЯреЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ, рджреВрд╕рд░рд╛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ - рдЗрд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛рдПрдБ рдирд╣реАрдВ рдЖрдПрдВрдЧреА , fbcon рдЬреИрд╕реЗ рд╣реА рдЗрд╕реЗ рджреЗрдЦрддрд╛ рд╣реИ, рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рдХреЛ рд╕реНрдиреИрдк рдХрд░ рджреЗрдЧрд╛ ред
рд╕рдЪ рд╣реИ, рдЬрдм vfb рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╕реВрдХреНрд╖реНрдорддрд╛ рд╣реЛрддреА рд╣реИ - рдЗрд╕реЗ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдореЙрдбреНрдпреВрд▓ рдХреЛ vfb_enable = 1 рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрд╛ " рд╡реАрдбрд┐рдпреЛ = vfb " рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд░реНрдиреЗрд▓ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЦреБрдж рдХреЛ рдЗрд╕реЗ рд╕реАрдорд┐рдд рдХрд░ рд▓реЗрдВрдЧреЗред fbcon рд╣рдо рдПрдХ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдмрдирд╛рдПрдВрдЧреЗред

  1. рд╣рдо kernel_menuconfig рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдЗрдЯрдо рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░реНрд╕ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ
  2. рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╕рдорд░реНрдерди рдЪрд╛рд▓реВ рдХрд░реЗрдВ - рдлреНрд░реЗрдо рдмрдлрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди , рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рд╕реНрд╡рдпрдВ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╡рд░реНрдЪреБрдЕрд▓ рдлреНрд░реЗрдордмрдлрд╝рд░ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред
  3. рдПрдХ рд╕реНрддрд░ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ, рдЪрд░рд┐рддреНрд░ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░реЗрдВ

    рд╡рд░реНрдЪреБрдЕрд▓ рдЯрд░реНрдорд┐рдирд▓
    рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╡рд░реНрдг рдЕрдиреБрд╡рд╛рдж рд╕рдХреНрд╖рдо рдХрд░реЗрдВ
    рд╡рд░реНрдЪреБрдЕрд▓ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
    рдХрдВрд╕реЛрд▓ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдФрд░ рдЕрдирдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди

    рдЕрдВрддрд┐рдо рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдХрдВрд╕реЛрд▓ рдХреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░, рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЗрд╕реЗ рдлреНрд░реЗрдордмрдлрд╝рд░ рдбреНрд░рд╛рдЗрд╡рд░ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рдЬреЛ рдЗрд╕реЗ рдореЗрдореЛрд░реА рд╕реЗ рдЕрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
  4. рд╣рдо рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╕рдкреЛрд░реНрдЯ рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ, рдХрдВрд╕реЛрд▓ рдбрд┐рд╕реНрдкреНрд▓реЗ рдбреНрд░рд╛рдЗрд╡рд░ рд╕рдкреЛрд░реНрдЯ рдореЗрдиреНрдпреВ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рдлреНрд░реЗрдордмрд░реНрдирд░ рдХрдВрд╕реЛрд▓ рд╕рдкреЛрд░реНрдЯ рдХреЛ рдЪрд╛рд▓реВ рдХрд░ рджреЗрддрд╛ рд╣реИ , рдлрд┐рд░ рдХрдВрдкрд╛рдЗрд▓-рдЗрди рдлреЛрдВрдЯ рдЖрдЗрдЯрдо рдХреЛ рдПрдХреНрдЯрд┐рд╡реЗрдЯ рдХрд░реЗрдВ рдФрд░ рд╡рд╣рд╛рдВ рдХреБрдЫ рдлреЙрдиреНрдЯ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реАрдЬреАрдП 8x8 рдлреЙрдиреНрдЯ
  5. рд╣рдо рдореБрдЦреНрдп рдореЗрдиреВ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХрд░реНрдиреЗрд▓ рд╣реИрдХрд┐рдВрдЧ рдЖрдЗрдЯрдо рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ - рдпрджрд┐ рдЖрдк рд╡рд╣рд╛рдВ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕реВрдЪреА рдХреЗ рдЕрдВрдд рдХреЗ рдХрд░реАрдм рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХрд░реНрдиреЗрд▓ рдмреВрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд╛рд▓рд╛ рдЖрдЗрдЯрдо рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рдмреВрдЯ-рд▓реЛрдбрд░ рдЙрдиреНрд╣реЗрдВ рдХрд░реНрдиреЗрд▓ рддрдХ рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕ рдЖрдЗрдЯрдо рдХреЗ рд╕рд╛рде рдкреИрд░рд╛рдореАрдЯрд░ рд▓рд╛рдЗрди рдХреЛ рдкреВрд░рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдкреВрд░рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рд╣рдо рдкреВрд░рдХ рд╣реЛрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдмреВрдЯрд▓реЛрдбрд░ рдХрдВрд╕реЛрд▓ = ttyATH0 рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХрдВрд╕реЛрд▓ рд╕реАрд░рд┐рдпрд▓ рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдо рдЗрд╕реЗ рдпрд╣реАрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ - рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреИрдЪ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдУрд╡рд░рд░рд╛рдЗрдб рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡рд╣рд╛рдВ рдЬрд╛рдПрдВрдЧреЗред рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рд╕реНрдкрд░реНрд╢ рди рдХрд░реЗрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрдЪрд╛рдПрдВ рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВред
  6. рдЬрд╣рд╛рдБ рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд╡рд╣рд╛рдБ рдЬрд╛рддреЗ рд╣реИрдВ, рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рдФрд░ рдкреИрдЪ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ - рд▓рдХреНрд╖реНрдп / linux / ar71xx / ред рд╣рдо рдЬреЗрдиреЗрд░рд┐рдХ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреЙрдиреНрдлрд┐рдЧ-рдбрд┐рдлреЙрд▓реНрдЯ рдлрд╛рдЗрд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рд╣реА рд▓рд╛рдЗрди рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рд╡рд╣реА рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рд╣рдордиреЗ рдХрд░реНрдиреЗрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рджреЗрдЦрд╛ рдерд╛:
    CONFIG_CMDLINE = "рд░реВрдЯрдлрд╝рд╕реНрдЯрд╛рдЗрдк = рд╕реНрдХреНрд╡реИрд╢рдлрд╝реНрд╕, jffs2 noinitrd"
    рдХрдВрд╕реЛрд▓ = tty0 рдФрд░ fbcon = font: <font name> рдХреЛ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдХрд░реНрдиреЗрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЪрдпрдирд┐рдд рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдлрд╝реЙрдиреНрдЯ рдирд╛рдо рд╕реЗрдЯ рдХрд░рдирд╛ред рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдорд┐рд▓рддрд╛ рд╣реИ
    CONFIG_CMDLINE = "rootfstype = squashfs, jffs2 noinitrd рдХрдВрд╕реЛрд▓ = tty0 fbcon = рдлрд╝реЙрдиреНрдЯ: ProFont6x11"


рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдЬреЛ рдЖрдЦрд┐рд░реА рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рд╡рд╣ рд╣реИ рдореЗрдиреНрдпреВрдХреЛрдлрд┐рдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдФрд░ рдлрд╝реЙрд╕реНрд╕реЗрдЯ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рд╡реНрдпрд╕реНрддрдмреЙрдХреНрд╕ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ , рдЬреЛ рд╣рдореЗрдВ рд╣рдорд╛рд░реЗ рдлреНрд░реЗрдордмрдлрд╝рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдпрд╣ рдмреЗрд╕ рд╕рд┐рд╕реНрдЯрдо - рдмрд┐рдЬреАрдмреЙрдХреНрд╕ - рд▓рд┐рдирдХреНрд╕ рд╕рд┐рд╕реНрдЯреЗрдо рдпреВрдЯрд┐рд▓рд┐рдЯреАрдЬ рдореЗрдиреВ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред

рдЕрдм рдЖрдк рдХрд░реНрдиреЗрд▓ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Build_dir / target-mips_r2_uClibc-0.9.33.2 / linux-ar71xx_generic / linux-3.6.9 / dri рдореЗрдВ
рдЫрдВрдж / рд╡реАрдбрд┐рдпреЛ /
рдХрд┐ .ko рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рджреВрд░ рд▓реЗ рдЬрд╛рдПрдВ
рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡рд╣ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдПрдХ рдЪрд╛рд▓рдХ рдХрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЬреЛ рдЙрдкрд╕рд░реНрдЧ " sys_ " рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХрдИ рдореЙрдбреНрдпреВрд▓ рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпреЗ рдлрд╝рдВрдХреНрд╢рди рдЭреВрда рдмреЛрд▓рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдкреНрд▓рдЧ-рдЗрди рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдореЗрдиреВ рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛, рдореБрдЭреЗ рдХреЙрдирдХреНрд╕рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкреИрдЪ рд▓рд┐рдЦрдирд╛ рдерд╛ред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдирдП рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рд░рд╛рдЙрдЯрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрд╕рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдПрд╕рдПрд╕рдПрдЪ рдкрд░ рд╣рдо рд░рд╛рдЙрдЯрд░ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж / рдЖрджрд┐ред рдЗрдирдЯреИрдм рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдЦреЗрдВ:

::sysinit:/etc/init.d/rcS S boot ::shutdown:/etc/init.d/rcS K shutdown ttyATH0::askfirst:/bin/ash --login 

рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдмрд╕ рдпрд╣ рдХрд╣рддреА рд╣реИ рдХрд┐ рдЖрдкрдХреЛ ttyATH0, рд╕реАрд░рд┐рдпрд▓ рдкреЛрд░реНрдЯ рдкрд░ рд▓реЙрдЧрд┐рди рдХреЗ рд▓рд┐рдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рдмрд╛рдпрдиреЗрд░реА - рдмрд┐рдЬреАрдмреЙрдХреНрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛)ред рдпрд╣ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЖрд╕реНрдХрдлрд░реНрд╕реНрдЯ) рдХрд┐ рдЗрд╕ рдХрдВрд╕реЛрд▓ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдПрдВрдЯрд░ рджрдмрд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдПрдХ рдФрд░ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ:

 tty0::respawn:/bin/ash --login 

рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрд░реНрдиреЗрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ

 cat /proc/cmdline 

рдФрд░ рд░рд╛рдЙрдЯрд░ рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░реЗрдВред
рдЕрдм, рдмрджрд▓реЗ рдореЗрдВ, рд╣рдо vfb рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ insmod рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдмрд╣реБрдд рд╣реА рдЕрдВрдд рдореЗрдВ рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ

 insmod vfb.ko vfb_enable=1 


рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ dmesg рдореЗрдВ рдЗрди рд╢рдмреНрджреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП: рдХрдВрд╕реЛрд▓: рдХрд▓рд░ рдлреНрд░реЗрдо рдмрдлрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ 53x21
рдХрдВрд╕реЛрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдЪрдпрдирд┐рдд рдлрд╝реЙрдиреНрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВ, рд╣рдорд╛рд░реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рдорд╛рди:

 fbset -g 320 240 320 240 16 

рдпрд╣ рджреГрд╢реНрдпрдорд╛рди рдФрд░ рдЖрднрд╛рд╕реА рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЛ 320x240 рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдЧрд╛ (рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╡реЗ рд╕рдВрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рд╡рд░реНрдЪреБрдЕрд▓ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдмрдбрд╝рд╛ рдлреНрд░реЗрдо рдмрдлрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ рджреГрд╢реНрдпрдорд╛рди рд╕реЗ рдЕрдзрд┐рдХ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрдмрд▓ рдмрдлрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ), рдФрд░ рд░рдВрдЧ рдХреА рдЧрд╣рд░рд╛рдИ 16 рдмрд┐рдЯреНрд╕ рд╣реИред
fbcon рдХреЛ рдЗрд╕рдХреЗ рд╕рдВрдХрд▓реНрдк рдФрд░ рд╕рдВрджреЗрд╢ рдХреЛ dmesg рдореЗрдВ рдмрджрд▓рдХрд░ рдЗрд╕ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдлреНрд░реЗрдордмрдлрд╝рд░ рд╕реЗ рдХрдВрд╕реЛрд▓ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рдкреБрдирдГ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:

 echo "0" > /sys/class/vtconsole/vtcon1/bind echo "1" > /sys/class/vtconsole/vtcon1/bind 

рдпрд╣ рдХрдорд╛рдВрдб рдХреА рдПрдХ рдЙрдкрдпреЛрдЧреА рдЬреЛрдбрд╝реА рд╣реИ рдЬреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╣рдорд╛рд░реЗ рдХрд╛рдо рдЖрдПрдЧреА - рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдЖрдк рдлреНрд░реЗрдо-рдмрдлрд╝рд░ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдЕрдирд▓реЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рд╕рд╛рдВрддреНрд╡рдирд╛ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд░рд╣реЗрдЧрд╛ред
рдпрд╣ рдПрдХ рдХреАрдмреЛрд░реНрдб рдХреЛ рд░рд╛рдЙрдЯрд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреЛрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдЖрдк рдиреЗрддреНрд░рд╣реАрди рд╕реНрдкрд╖реНрдЯ рдФрд░ dmesg рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдбрд┐рд╕реНрдкреНрд▓реЗ рдкрд░ рдХреБрдЫ рд╣реИред
рд╣рдореЗрдВ "рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ" рдХрдорд╛рдВрдб рдорд┐рд▓рдиреЗ рдХреЗ рдмрд╛рдж

 cat /dev/fb0 > scrn.raw 

рдФрд░ рдЗрд╕реЗ рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рд╡рд╣рд╛рдВ рд╣рдо рдЬреАрдЖрдИрдПрдордкреА рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдЬреЛ рдЖрд░рдЬреАрдмреА 565 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХрдЪреНрдЪреЗ рдЧреНрд░рд╛рдлрд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╣рдо рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ 320x240 рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдмрд┐рдЯрдиреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рднреВрд▓рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рддрд╕реНрд╡реАрд░ рдорд┐рд▓рддреА рд╣реИ (рдореЗрд░рд╛ рдбреНрд░рд╛рдЗрд╡рд░ рдЙрджреНрдШрд╛рдЯрди / рд╕рдорд╛рдкрди / рджреЗрд╡ / fb0 , рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ)ред рдХреЗред рдореИрдВрдиреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдлреНрд░реЗрдордмрдлрд╝рд░ рд╕реЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рд╣реИред рдЖрднрд╛рд╕реА рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реИ):

рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╕рд╛рдВрддреНрд╡рдирд╛ рдХреЗ рд╕реБрдВрджрд░, "рд╣реИрдХрд░" рд╣рд░реЗ рд░рдВрдЧ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реИ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╣рдореЗрдВ рдПрдХ рдЧрд▓рддреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ, рдпрд╛ рдмрд▓реНрдХрд┐, рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдореБрдЦреНрдп рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ - рдЕрдкрдиреЗ рдлреНрд░реЗрдо рдмрдлрд╝рд░ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд▓рд┐рдЦрдирд╛ - рдЪрд▓реЛ рдЙрдкрд▓рдмреНрдз рдХрдВрд╕реЛрд▓ рдлреЛрдВрдЯ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЫрд╣ рдлрд╝реЛрдЯреЛ, рддреАрди рдХрдВрд╕реЛрд▓ рдкрд░ рдФрд░ 4x4, 6x11 рдФрд░ 8x8 рдлреЛрдВрдЯ рдХреЗ рд╕рд╛рде рдорд┐рдбрдирд╛рдЗрдЯ рдХрдорд╛рдВрдбрд░ рдкрд░ рддреИрдпрд╛рд░ рдХрд┐рдПред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ 6x11 рд╣реИ:


4x4


6x11


8x8


4x4


6x11


8x8

рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рдбреНрд░рд╛рдЗрд╡рд░ рд▓рд┐рдЦрдирд╛


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдПрдХ рд╕реНрдкрд╖реНрдЯ рдФрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╕рдордп-рд╕рдордп рдкрд░ рдкреВрд░реЗ рд╕реНрдХреНрд░реАрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рдЖрдк рдПрдХ рдЯрд╛рдЗрдорд░ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдпреВрдПрд╕рдмреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреНрд░реЗрдордмрдлрд╝рд░ рдХреА рд╕рднреА рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЛ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЗрдВрдХ рджреЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реИ, рддрдерд╛рдХрдерд┐рдд рдЖрд╕реНрдердЧрд┐рдд ioред
рдЗрд╕рдХрд╛ рд╕рд╛рд░ рд╕рд░рд▓ рд╣реИ: рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдлреНрд░реЗрдордмрдлрд╝рд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд╣реА рд╕реНрдердЧрд┐рдд рдЖрдИрдУрдЖрд░ рджрд░реНрдЬ рдХрд░реЗрдВред рдкрдВрдЬреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди, рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рддрд╛рдХрд┐ рдлреНрд░реЗрдо рдмрдлрд░ рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдмрдврд╝рд╛ рджреЗ, рдЬреЛ рд╣рдорд╛рд░реЗ рдХреЙрд▓рдмреИрдХ рдХреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░ рдореЗрдВ рдбрд╛рд▓ рджреЗрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореЗрдореЛрд░реА рдореЗрдВ рд░рд╛рдЗрдЯ рдСрдкрд░реЗрд╢рди рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛! рдФрд░ рдЬрдм рдХреЙрд▓рдмреИрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрди рдкреГрд╖реНрдареЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдЬрд┐рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ? рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рд╕реНрдкреЗрд╕ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдмрд┐рдирд╛ рдХреБрдЫ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд░реБрдХрд╛рд╡рдЯ рдХреЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╣рдорд╛рд░рд╛ рдХреЙрд▓рдмреИрдХ рд╕рдордп-рд╕рдордп рдкрд░ рдореЗрдореЛрд░реА рдкреЗрдЬреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдлреЗрдВрдХрдирд╛ рд╣реЛрдЧрд╛, рди рдХрд┐ рдкреВрд░реЗ рдмрдлрд░ рдкрд░ред

рдЪреВрдВрдХрд┐ рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рдХреА рд░рд┐рд╣рд╛рдИ рдЗрддрдиреА рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ (рдпреВрдПрд╕рдмреА рдбрд┐рд╡рд╛рдЗрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧрд╛рдпрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрднреА рдлреНрд░реЗрдордмрдлрд╝рд░ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдиреЗ рджреЗрдВрдЧреЗ рдФрд░ рдЗрд╕ рд╕рдордп рдореЗрдореЛрд░реА рдХреЛ рдЦрд╛рд▓реА рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ), рд╣рдо рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ - рд╣рдо рдмреЛрд▓реНрдб рдореЗрдВ рд▓рд┐рдЦреЗрдВрдЧреЗ TODO рдФрд░ рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рд╕рд╣реА рд╕рдлрд╛рдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЕрдВрдд рдореЗрдВ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдХреА рд╕рдм рд▓рд┐рдЦреЗрдВрдЧреЗред рд╕рд╛рдорд╛рдиреНрдп рд╕рдлрд╛рдИ, рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде (рдЬреЛ рдХрдо рд╕реЗ рдХрдо рджреЛ рдмрд╛рд░ рдПрдлрдкреАрдПрд╕ рдмрдврд╝рд╛рдПрдЧрд╛), рд╣рдо рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ - рдЪреВрдВрдХрд┐ рд╣рдо рдЙрди рдкреГрд╖реНрдареЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдкреГрд╖реНрда рдХреЗ рд╢реАрд░реНрд╖ рдХреЗ рдЕрдиреБрд░реВрдк рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рднреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдПрдВрдЧреЗ, рдкрд░рдорд╛рдгреБ рдзреНрд╡рдЬ рдЬреЛрдбрд╝рдиреЗ рдХреА рднреВрд▓ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдкреГрд╖реНрда рдХреЛ рдЕрдкрдбреЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдВрддрд░рд┐рдХ рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рд╕рдВрдЪрд╛рд▓рди, рдЬреЛ " sys_ " рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдЖрд╕реНрдердЧрд┐рдд io рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдХреМрди рд╕реЗ рдкреГрд╖реНрда рдПрдХреНрд╕реЗрд╕ рдХрд┐рдП рдЧрдП рдереЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╖рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред

рдореЗрдореЛрд░реА рдкреЗрдЬ рд╕рдВрд░рдЪрдирд╛
 struct videopage { int x, y; unsigned char *mem; unsigned long length; atomic_t toUpdate; }; 


рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд▓рдВрдмрд╛рдИ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрддрд┐рдо рдкреГрд╖реНрда рдЕрдзреВрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЗрдВ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╣рдо рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрдИ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ - рдкреЗрдЬ рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛, рдлреНрд░реЗрдордмрдлрд╝рд░ рдореЗрдВ рдкреЗрдЬ рдХреА рд╕рдВрдЦреНрдпрд╛, рдЖрджрд┐ред
PAGE_SIZE рдХрд░реНрдиреЗрд▓ рд╕реНрд░реЛрдд рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╣реЗрд▓реНрдкрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ
 #define WIDTH 320 #define HEIGHT 240 #define BYTE_DEPTH 2 #define FB_SIZE WIDTH*HEIGHT*BYTE_DEPTH #define FP_PAGE_COUNT PAGE_ALIGN(FB_SIZE)/PAGE_SIZE #define PIXELS_IN_PAGE PAGE_SIZE/BYTE_DEPTH 


рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдлреНрд░реЗрдордмрдлрд╝рд░ рдХреЙрд▓рдмреИрдХ рдФрд░ рд╣рдорд╛рд░реЗ рдЖрд╕реНрдердЧрд┐рдд рдЖрдИрдУ рдХреЗ рдХреЙрд▓рдмреИрдХ рд╣реИрдВрдбрд▓рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВред

рдХреЙрд▓рдмреИрдХ
 static void display_fillrect(struct fb_info *p, const struct fb_fillrect *rect); static void display_imageblit(struct fb_info *p, const struct fb_image *image); static void display_copyarea(struct fb_info *p, const struct fb_copyarea *area); static ssize_t display_write(struct fb_info *p, const char __user *buf, size_t count, loff_t *ppos); static int display_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info); //--------------- static void display_update(struct fb_info *info, struct list_head *pagelist); 


рдЕрдЧрд▓рд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рджрд░реНрд╢рди рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИред

Fb_fix_screeninfo рд╕рдВрд░рдЪрдирд╛
 static struct fb_fix_screeninfo fixed_info = { .id = "STM32LCD", .type = FB_TYPE_PACKED_PIXELS, .visual = FB_VISUAL_TRUECOLOR, .accel = FB_ACCEL_NONE, .line_length = WIDTH * BYTE_DEPTH, }; 


рд╕рдм рдХреБрдЫ рднреА рд╕рд░рд▓ рд╣реИ - рд╣рдо рдЕрдкрдиреЗ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЖрдИрдбреА рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рдкреНрд░рдХрд╛рд░ - рдЕрдиреНрдп рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдмрд╕реЗ рдЖрдо рдмрд┐рдЯрдореИрдк рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЯреНрд░реБрдХрд░реЛрд▓рд░ рд░рдВрдЧ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдЗрд╕рдХреЗ рдХрд░реАрдм рд╣реИ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореЛрдиреЛрдХреНрд░реЛрдо рдирд╣реАрдВ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпрдХреНрд╖ рд░рдВрдЧ рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдВрд░рдЪрдирд╛ рдЖрддреА рд╣реИ (рд╕рдВрднрд╛рд╡рд┐рдд) рдЪрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рдеред рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рд╣рдореЗрдВ рдкрд░рдорд┐рдЯ рдмрджрд▓рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдкрд┐рдЫрд▓реЗ рдврд╛рдВрдЪреЗ рдХреА рддрд░рд╣ рд╕реНрдерд┐рд░ рд░рд╣реЗрдЧрд╛ред

Fb_var_screeninfo рд╕рдВрд░рдЪрдирд╛
 static struct fb_var_screeninfo var_info = { .xres = WIDTH, .yres = HEIGHT, .xres_virtual = WIDTH, .yres_virtual = HEIGHT, .width = WIDTH, .height = HEIGHT, .bits_per_pixel = 16, .red = {11, 5, 0}, .green = {5, 6, 0}, .blue = {0, 5, 0}, .activate = FB_ACTIVATE_NOW, .vmode = FB_VMODE_NONINTERLACED, }; 


рдпрд╣рд╛рдВ рд╣рдо рджреГрд╢реНрдпрдорд╛рди рдФрд░ рдЖрднрд╛рд╕реА рд╕рдВрдХрд▓реНрдкреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдлрд╝реЗрд╕реЗрдЯ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдорд┐рд▓реАрдореАрдЯрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рднреМрддрд┐рдХ рдЖрдпрд╛рдо (рдЖрдк рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХрд┐рд╕реА рднреА, рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕рдВрдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ), рдЫрд╡рд┐ рдХреА рдмрд┐рдЯрдиреЗрд╕, рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрд░рдЪрдирд╛рдПрдВ - рдХреИрд╕реЗ рд░рдВрдЧ рдХрд╛ рд╡рд┐рд╡рд░рдг рдШрдЯрдХ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рд╣реИрдВред рдЙрдирдореЗрдВ, рдкрд╣рд▓рд╛ рдорд╛рди рдСрдлрд╕реЗрдЯ рд╣реИ, рджреВрд╕рд░рд╛ рдмрд┐рдЯреНрд╕ рдореЗрдВ рд▓рдВрдмрд╛рдИ рд╣реИ рдФрд░ рддреАрд╕рд░рд╛ рдЭрдВрдбрд╛ рд╣реИ, "рджрд╛рдИрдВ рдУрд░ рдЕрд░реНрде рдмрд┐рдЯ"ред
I / O рдХреЛ рдЖрд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо, рдЖрд╕реНрдердЧрд┐рдд io ред

Fb_deferred_io рд╕рдВрд░рдЪрдирд╛
 static struct fb_deferred_io display_defio = { .delay = HZ/6, .deferred_io = &display_update, }; 


рдЕрд╡рдзрд┐ рдорд╛рди рдХрд╛ рд╡рд┐рдХрд▓реНрдк, .delay рдлрд╝реАрд▓реНрдб, рдХрд╛рд░реНрдп, рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдЕрдиреБрднрд╡рдЬрдиреНрдп рд╣реИ - рдпрджрд┐ рдЖрдк рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдорд╛рди рдЪреБрдирддреЗ рд╣реИрдВ, рддреЛ рдЕрджреНрдпрддрди рдЙрдкрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдмрд╛рд░ рдШрдЯрд┐рдд рд╣реЛрдЧрд╛, рдпрджрд┐ рдЖрдк рдмрд╣реБрдд рдмрдбрд╝реЗ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдердЧрд┐рдд рдиреМрдХрд░рд┐рдпреЛрдВ рдХреА рдХрддрд╛рд░ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧреАред рдЗрд╕ рд╕рдордп рд╣рдорд╛рд░рд╛ рдкреНрд░рджрд░реНрд╢рди рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдЪрд▓рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рдФрд░ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпреВрдПрд╕рдмреА рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВред рдкрд╣рд▓реЗ рд▓реЗрдЦ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╕реНрдХреНрд░реАрди рдХрд╛ рдПрдХ рдкреВрд░реНрдг рдкреБрдирд░реНрд╡рд┐рдХрд╛рд╕ 3.6 рдПрдлрдкреАрдПрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рд╣реИред рд▓реЗрдХрд┐рди рдирд┐рд░рд╛рд╢рд╛ рди рдХрд░реЗрдВ - рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╣рдореЗрд╢рд╛ рдкреВрд░реА рд╕реНрдХреНрд░реАрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдмрдирд╛рдПрдВрдЧреЗ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдЙрдкрд▓рдмреНрдз рд▓реЛрд╣реЗ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рддрд╛рдХрд┐ рдПрдлрдкреАрдПрд╕ ~ 8 рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдП - рдЕрдзреВрд░реЗ рд░реАрдбрд┐рдВрдЧ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдбрд┐рд╡рд╛рдЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рд╣реИред рдЗрди 9 рдПрдлрдкреАрдПрд╕, рд╡реИрд╕реЗ, рднреМрддрд┐рдХ рд╕реАрдорд╛ рд╣реИ рдЬреЛ рд╣рдо рдХрдЪреНрдЪреЗ рд╡реАрдбрд┐рдпреЛ рдбреЗрдЯрд╛ (рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдмрд┐рдирд╛) рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╕рдордп рдлреБрд▓ рд╕реНрдкреАрдб рдпреВрдПрд╕рдмреА рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рд╣рдо 12 рдПрдордмреА / рдПрд╕ рдХреЗ рдПрдлрдПрд╕ рдпреВрдПрд╕рдмреА рдЯреНрд░рд╛рдВрд╕рдлрд░ рджрд░ рд╕реАрдорд╛ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░рд╛ рдлреНрд░реЗрдо 320 * 240 * 16 = 1,228,800 рдмрд┐рдЯреНрд╕ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рд╡реИрдХреНрдпреВрдо рдлреНрд░реЗрдо рджрд░ рдореЗрдВ рдЖрджрд░реНрд╢, рдЧреЛрд▓рд╛рдХрд╛рд░ 9.8 FPS рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реЗ рд╣реЗрдбрд░ рдХреЛ рдпрд╣рд╛рдВ рд╕реЗ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджреЗрдВ, рд╣рдорд╛рд░реЗ рдбреНрд░рд╛рдЗрд╡рд░ рдореЗрдВ рдиреБрдХрд╕рд╛рди, рдореЗрдЬрдмрд╛рди рдирд┐рдпрдВрддреНрд░рдХ рдЪрд╛рд▓рдХ рдореЗрдВ рдиреБрдХрд╕рд╛рди, рдПрд╕рдЯреАрдПрдордХреЗ рдкрд░ рдЪрд╛рд▓рдХ рдореЗрдВ рдиреБрдХрд╕рд╛рди - рдФрд░ рд╣рдореЗрдВ 8-9 рдПрдлрдкреАрдПрд╕ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реАрдорд╛ рдорд┐рд▓рддреА рд╣реИ, рдЬреЛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЕрдм рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реА рдЖрд╡реГрддреНрддрд┐ рд▓рдЧрднрдЧ 3.5 рдПрдлрдкреАрдПрд╕ рд╣реИ, рдФрд░, рдореЗрд░реЗ рдорд╛рдк рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЕрд╡рдзрд┐ рджреЛ рдмрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдпрд╛рдиреА 6-7 рд╣рд░реНрдЯреНрдЬ, рдЗрд╖реНрдЯрддрдо рд╣реЛ рдЧрдИред рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд HZ рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдпрд╣реА рдкреВрдЫрддреЗ рд╣реИрдВред рд╡реИрд╕реЗ, рдЖрдкрдХреЛ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП - рдирд╛рдо рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрд╣ рдореИрдХреНрд░реЛ 1 рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реА рдЕрд╡рдзрд┐ (рдХрд░реНрдиреЗрд▓ рдХреНрд╡рд╛рдВрдЯрд╛ рдореЗрдВ), рдЗрд╕рд▓рд┐рдП, 6 рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЧреБрдгрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЫрд╣ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдВрдд рдореЗрдВ, рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде рд╕рдВрд░рдЪрдирд╛ рдХреЛ рднрд░реЗрдВред

Fb_ops рд╕рдВрд░рдЪрдирд╛
 static struct fb_ops display_fbops = { .owner = THIS_MODULE, .fb_read = fb_sys_read, .fb_write = display_write, .fb_fillrect = display_fillrect, .fb_copyarea = display_copyarea, .fb_imageblit = display_imageblit, .fb_setcolreg = display_setcolreg, }; 


рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рддреБрд░рдВрдд рдЙрди " sys_ " рдХреЗ рдХреЙрд▓рдмреИрдХ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ , рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╣рд╛рдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рд╢реЗрд╖ рд╕рднреА рдореЗрдВ, рд╣рдореЗрдВ рдЕрднреА рднреА рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкрдирд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕рдВрд░рдЪрдирд╛ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рд╕рдордп рд╕реЗ рд╢рд╛рдпрдж рд╣реА рдмрджрд▓ рдЬрд╛рдПрдЧреА, рд╣рдо рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗред

Usblcd рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕рдВрд░рдЪрдирд╛
 struct usblcd { struct usb_device *udev; struct usb_interface *interface; struct device *gdev; struct fb_info *info; struct usb_endpoint_descriptor *bulk_out_ep; unsigned int bulk_out_packet_size; struct videopage videopages[FP_PAGE_COUNT]; unsigned long pseudo_palette[17]; }; 


рд╣рдорд╛рд░реЗ рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдкреЗрдЬ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрд░рдЪрдирд╛ рдЦреБрдж рд╣реА рдЫреЛрдЯреА рд╣реЛ рдЧрдИ рд╣реИ, рдФрд░ рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдХреЗрд╡рд▓ 38 рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдмреЗрд╡рдХреВрдл рдирд╣реАрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╕рд░рдгреА рдХреЛ 760 рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рдЫреЛрдбрд╝ рджреЗрдВред рдорд╛рд╕реНрдЯрд░ рдХрд░реЗрдВрдЧреЗред
рдЕрдВрддрд┐рдо рдХреНрд╖реЗрддреНрд░, pseudo_palette, рдЫрджреНрдо рдкреИрд▓реЗрдЯ рдХреЗ рдиреАрдЪреЗ рдХрд╛ рд╕реНрдерд╛рди рд╣реИ рдЬрд┐рд╕реЗ fbcon рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ .fb_setcolreg рдХреЙрд▓рдмреИрдХ рд╕реЗ рднрд░рд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ fbcon рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдордирд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦреЗ рдЧрдП рд╕рднреА рдлрд╛рдпрд░рд╡реБрдб рдореЗрдВ, рдпрд╣ рдХреЙрд▓рдмреИрдХ рдХрд░реНрдиреЗрд▓ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рдЙрджрд╛рд╣рд░рдг рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдпрд╛ рддреЛ рдПрдХ рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА fbcon рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ред рдЪрд▓реЛ рдЙрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдХреЙрд▓рдмреИрдХ display_setcolreg
 #define CNVT_TOHW(val,width) ((((val)<<(width))+0x7FFF-(val))>>16) static int display_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) { int ret = 1; if (info->var.grayscale) red = green = blue = (19595 * red + 38470 * green + 7471 * blue) >> 16; switch (info->fix.visual) { case FB_VISUAL_TRUECOLOR: if (regno < 16) { u32 *pal = info->pseudo_palette; u32 value; red = CNVT_TOHW(red, info->var.red.length); green = CNVT_TOHW(green, info->var.green.length); blue = CNVT_TOHW(blue, info->var.blue.length); transp = CNVT_TOHW(transp, info->var.transp.length); value = (red << info->var.red.offset) | (green << info->var.green.offset) | (blue << info->var.blue.offset) | (transp << info->var.transp.offset); pal[regno] = value; ret = 0; } break; case FB_VISUAL_STATIC_PSEUDOCOLOR: case FB_VISUAL_PSEUDOCOLOR: break; } return ret; } 


рдпрд╣, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рд╣реИ, рдРрд╕реЗ рдХреЙрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдХреЛрдб рд╣реИ, рдЬрд┐рд╕рдореЗрдВ CNVT_TOHW рдореИрдХреНрд░реЛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рдВрдЧ рдШрдЯрдХреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдЪрд╛рд▓рдХ рд╕реЗ рдЪрд╛рд▓рдХ рддрдХ рднреА рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЕрдВрддрддрдГ рдореБрдЦреНрдп рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ fb.h рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдХрд╛рд░реНрдп 16-рд░рдВрдЧ рд╡рд╛рд▓реЗ рдЫрджреНрдо рдкреИрд▓реЗрдЯ рдореЗрдВ рднрд░рдирд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдП рдЧрдП рдХрдВрд╕реЛрд▓ рдбреНрд░рд╛рдЗрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдм рд╣рдо рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдХрд╛рд░реНрдп рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЖрдпрдд рдЬрд┐рд╕рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдкреНрд░рднрд╛рд╡рд┐рдд рдереАред рдлрд╝рдВрдХреНрд╢рди рдпрд╣ рдЧрдгрдирд╛ рдХрд░реЗрдЧрд╛ рдХрд┐ рдЗрд╕ рдЖрдпрдд рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдХреЗ рдХреМрди рд╕реЗ рдкреГрд╖реНрда рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЙрди рдкрд░ "рдЕрдкрдбреЗрдЯ рдЖрд╡рд╢реНрдпрдХ" рдлрд╝реНрд▓реИрдЧ рд░рдЦреЗрдВ рдФрд░ рдЙрд╕реА рдХреЙрд▓рдмреИрдХ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╢реЗрдбреНрдпреВрд▓ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдбрд┐рдлрд░реНрдб io рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, sys_ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рднреА рдХреЙрд▓рдмреИрдХ рдХрдо рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдХрдорд╛рдВрдб рдХреЗ рд╕рдорд╛рди рд╕реНрдкрд░реНрд╢ рдХрд╣реЗрдВрдЧреЗред

Display_touch рдлрд╝рдВрдХреНрд╢рди
 static void display_touch(struct fb_info *info, int x, int y, int w, int h) { int firstPage; int lastPage; int i; struct usblcd *dev=info->par; firstPage=((y*WIDTH)+x)*BYTE_DEPTH/PAGE_SIZE-1; lastPage=(((y+h)*WIDTH)+x+w)*BYTE_DEPTH/PAGE_SIZE+1; if(firstPage<0) firstPage=0; if(lastPage>FP_PAGE_COUNT) lastPage=FP_PAGE_COUNT; for(i=firstPage;i<lastPage;i++) atomic_dec(&dev->videopages[i].toUpdate); schedule_delayed_work(&info->deferred_work, info->fbdefio->delay); } 


рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб, рдХрд╛рдлреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╕рдВрдХрд▓реНрдк рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЫреВрддреЗ рд╣реИрдВ, рд╣рдореЗрд╢рд╛ рдЧреЛрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдпреВрдБ рдХрд╣реЗрдВ, рд╣рдо рдмрд╕ рдПрдХ рдЫреЛрд░ рд╕реЗ рдПрдХ рдЫреЛрд░ рд╕реЗ рдПрдХ рдкреЗрдЬ рд▓реЗрддреЗ рд╣реИрдВред
рдЕрдм рд╣рдо рдЕрдиреНрдп рд╕рднреА рдХреЙрд▓рдмреИрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ - рд╡реЗ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ:

рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рднреА рдХреЙрд▓рдмреИрдХ
 static void display_fillrect(struct fb_info *p, const struct fb_fillrect *rect) { sys_fillrect(p, rect); display_touch(p, rect->dx, rect->dy, rect->width, rect->height); } static void display_imageblit(struct fb_info *p, const struct fb_image *image) { sys_imageblit(p, image); display_touch(p, image->dx, image->dy, image->width, image->height); } static void display_copyarea(struct fb_info *p, const struct fb_copyarea *area) { sys_copyarea(p, area); display_touch(p, area->dx, area->dy, area->width, area->height); } static ssize_t display_write(struct fb_info *p, const char __user *buf, size_t count, loff_t *ppos) { int retval; retval=fb_sys_write(p, buf, count, ppos); display_touch(p, 0, 0, p->var.xres, p->var.yres); return retval; } 


рдЕрдм, рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо рдЖрд╕реНрдердЧрд┐рдд io рд╕реЗ рд╣рдорд╛рд░реЗ рдХреЙрд▓рдмреИрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬреЗрдЧрд╛ред рдпрд╣ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ .write рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рдПрдЧрд╛ред рд╣рдо рдкреГрд╖реНрдареЛрдВ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд▓рд┐рдЦреЗрдВрдЧреЗ, рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рднреВрд▓рдирд╛, рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╢реАрд░реНрд╖рдХред рд╣рдорд╛рд░реЗ рд╡реАрдбрд┐рдпреЛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, x, y рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдФрд░ рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдкрд╣рд▓реЗ рд╣реА рдХреА рдЬрд╛ рдЪреБрдХреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрдлрд░ рдореЗрдВ рдзрдХреЗрд▓ рджреЗрдВ рдФрд░ рдЗрд╕реЗ USB рдкрд░ рдЫреЛрдбрд╝ рджреЗрдВред

рд╡рд┐рд▓рдВрдмрд┐рдд I / O рдХреЙрд▓рдмреИрдХ
 unsigned char videobuffer[PAGE_SIZE+8]; static void display_update(struct fb_info *info, struct list_head *pagelist) { struct usblcd* dev = info->par; int retval; struct page *page; int i; int usbSent=0; list_for_each_entry(page, pagelist, lru) { atomic_dec(&dev->videopages[page->index].toUpdate); } for (i=0; i<FP_PAGE_COUNT; i++) { if(atomic_inc_and_test(&dev->videopages[i].toUpdate)) atomic_dec(&dev->videopages[i].toUpdate); else { *(unsigned short*)(videobuffer)=cpu_to_le16(dev->videopages[i].x); *(unsigned short*)(videobuffer+2)=cpu_to_le16(dev->videopages[i].y); *(unsigned long*)(videobuffer+4)=cpu_to_le32(dev->videopages[i].length>>1); memcpy(videobuffer+8,dev->videopages[i].mem,dev->videopages[i].length); retval = usb_bulk_msg(dev->udev, usb_sndbulkpipe(dev->udev, 1),videobuffer, dev->videopages[i].length+8, &usbSent, HZ); if (retval) printk(KERN_INFO "usblcd: sending error!\n"); } } } 


рдЪреВрдБрдХрд┐ рд╣рдо рдЗрд╕ рдХреЙрд▓рдмреИрдХ рдХреЛ рдПрдХ рдИрдорд╛рдирджрд╛рд░ рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ( deferrd io рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рдпрд╛ рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреА рдкрд╣рд▓ рдкрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдкреНрд░рджрд░реНрд╢рди рд╢реЗрдбреНрдпреВрд▓ рдХрд░рдХреЗ call_souch рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдбреНрдпреВрд▓ рдХрд░рдХреЗ), рд╣рдо рдмрд╕ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ рдЬрд╛рдПрдВрдЧреЗ, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рдФрд░, рдЙрдиреНрд╣реЗрдВ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╖рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред
рдпрджрд┐ рд╣рдо рд╕реНрдердЧрд┐рдд I / O рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣рд╛рдВ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗ, рддреЛ рд╕реВрдЪреА рдмрд╕ рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рдПрдЧреАред
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдмрд╕ рд╕рднреА рдкреЗрдЬреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рдорд╛рдгреБ рдХреА рдПрдХ рдЕрджреНрдпрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ USB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рднреЗрдЬрдХрд░ рдЗрд╕ рдЕрдкрдбреЗрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдЬрдм рд╣рдо рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдЙрд╕рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рднреЗрдЬрдиреЗ рдХреЛ USB рдЕрдиреБрд░реЛрдз рдмреНрд▓реЙрдХ рдпрд╛ URB рдирд╛рдордХ рдЕрдзрд┐рдХ рд╕рд╣реА рддрдВрддреНрд░ рд╕реЗ рдмрджрд▓ рджреЗрдВрдЧреЗред рдпрд╣ USB рд╣реЛрд╕реНрдЯ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдФрд░ рддреБрд░рдВрдд рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдФрд░ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпреВрдЖрд░рдмреА рдиреЗ рдЙрдбрд╝рд╛рди рднрд░реА (рдпрд╛ рдЙрдбрд╝рд╛рди рдирд╣реАрдВ рднрд░реА) рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЛ рд╣рдорд╛рд░реЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдПрдлрдкреАрдПрд╕ рдХреЛ рдирд┐рдЪреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ (рдмрд┐рдирд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рдЬреЛ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ)ред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╕ рдереЛрдбрд╝рд╛ рд╕рд╛ рдмрдЪрд╛ рдерд╛ - рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдПрдХ рдмреБрд░рд╛ рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдЦреБрдж рдХреЛ рд╕рд╛рдл рди рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рдерд╛, рд╡рд╣ рд╕рдм рдХреБрдЫ рдЬрд╛рдВрдЪ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рд╢реБрд░реВ рдХрд░рдирд╛ рдерд╛ред

рдХреЙрд▓рдмреИрдХ рдЬрд╛рдВрдЪ
 static int LCDProbe(struct usb_interface *interface, const struct usb_device_id *id) { struct usblcd *dev; struct usb_host_interface *iface_desc; struct usb_endpoint_descriptor *endpoint; unsigned char *videomemory; int retval = -ENODEV; int i; dev_info(&interface->dev, "USB STM32-based LCD module connected"); dev = kzalloc(sizeof(*dev), GFP_KERNEL); if (!dev) { dev_err(&interface->dev, "Can not allocate memory for device descriptor\n"); retval = -ENOMEM; goto exit; } dev->udev=interface_to_usbdev(interface); dev->interface = interface; iface_desc = interface->cur_altsetting; for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { endpoint = &iface_desc->endpoint[i].desc; if(usb_endpoint_is_bulk_out(endpoint)) { dev->bulk_out_ep=endpoint; dev->bulk_out_packet_size = le16_to_cpu(endpoint->wMaxPacketSize); break; } } if(!dev->bulk_out_ep) { dev_err(&interface->dev, "Can not find bulk-out endpoint!\n"); retval = -EIO; goto error_dev; } dev->gdev = &dev->udev->dev; dev->info = framebuffer_alloc(0, dev->gdev); dev->info->par = dev; dev->info->dev = dev->gdev; if (!dev->info) { dev_err(&interface->dev, "Can not allocate memory for fb_info structure\n"); retval = -ENOMEM; goto error_dev; } dev->info->fix = fixed_info; dev->info->var = var_info; dev->info->fix.smem_len=FP_PAGE_COUNT*PAGE_SIZE; dev_info(&interface->dev, "Allocating framebuffer: %d bytes [%lu pages]\n",dev->info->fix.smem_len,FP_PAGE_COUNT); videomemory=vmalloc(dev->info->fix.smem_len); if (!videomemory) { dev_err(&interface->dev, "Can not allocate memory for framebuffer\n"); retval = -ENOMEM; goto error_dev; } dev->info->fix.smem_start =(unsigned long)(videomemory); dev->info->fbops = &display_fbops; dev->info->flags = FBINFO_FLAG_DEFAULT|FBINFO_VIRTFB; dev->info->screen_base = videomemory; memset((void *)dev->info->fix.smem_start, 0, dev->info->fix.smem_len); for(i=0;i<FP_PAGE_COUNT;i++) { dev->videopages[i].mem=(void *)(dev->info->fix.smem_start+PAGE_SIZE*i); dev->videopages[i].length=PAGE_SIZE; atomic_set(&dev->videopages[i].toUpdate,-1); dev->videopages[i].y=(((unsigned long)(PAGE_SIZE*i)>>1)/WIDTH); dev->videopages[i].x=((unsigned long)(PAGE_SIZE*i)>>1)-dev->videopages[i].y*WIDTH; } dev->videopages[FP_PAGE_COUNT-1].length=FB_SIZE-(FP_PAGE_COUNT-1)*PAGE_SIZE; dev->info->pseudo_palette = &dev->pseudo_palette; dev->info->fbdefio=&display_defio; fb_deferred_io_init(dev->info); dev_info(&interface->dev, "info.fix.smem_start=%lu\ninfo.fix.smem_len=%d\ninfo.screen_size=%lu\n",dev->info->fix.smem_start,dev->info->fix.smem_len,dev->info->screen_size); usb_set_intfdata(interface, dev); retval = register_framebuffer(dev->info); if (retval < 0) { dev_err(dev->gdev,"Unable to register_frambuffer\n"); goto error_buff; } return 0; error_buff: vfree(videomemory); error_dev: kfree(dev); exit: return retval; } 


рдпрд╣рд╛рдБ, рд╣рдо рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдлреНрд░реЗрдордмрдлрд╝рд░ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП , рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдлреНрд░реЗрдордмрдлрд╝рд░ рдХреЗ рд▓рд┐рдПред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ - рд╣рдо vmalloc рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ ред Kmalloc рд╕реЗ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ vmalloc рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА рдХреЗ рдкреЗрдЬ рдЯреЗрдмрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ "рдмрдлрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░реЗрдВ" рдЬрд┐рд╕реЗ рдЖрдк рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдореГрддрд┐ рдХреЗ рдПрдХ рд╣реА рдмреНрд▓реЙрдХ рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рдРрд╕реЗ рдкреГрд╖реНрда рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдХрд░реАрдм рднреА рдирд╣реАрдВ рд╣реИрдВред kmalloc рдореИрдореЛрд░реА рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдмреНрд▓реЙрдХ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдо рдПрдХ рдмрдбрд╝реЗ рдкрд░реНрдпрд╛рдкреНрдд рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВ, vmalloc рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред
рд╣рдо рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╣реИрдВ, insmodem рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдЧрд░ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдбрд┐рд╕реНрдкреНрд▓реЗ рдкрд░ рдХрдВрд╕реЛрд▓ рджреЗрдЦрддреЗ рд╣реИрдВ!

рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдЖрдЦрд┐рд░рдХрд╛рд░ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрджрдо рдЙрдард╛рдпрд╛ - рдПрдХ рдХрд╕реНрдЯрдо рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдбреНрд░рд╛рдЗрд╡рд░ рд╕реЗ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рдо рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдмрд╛рд╣реЛрдВ рдореЗрдВ рдЪрд▓реЗ рдЧрдП, рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рджрд░реНрд╢рди рд╣реИред рд╣рд╛рдВ, рд╣рдордиреЗ рдереЛрдбрд╝рд╛ рдмреБрд░рд╛ рдХрд┐рдпрд╛, рдЕрдкрдиреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд╕рдлрд╛рдИ рдирд╣реАрдВ рдХреА рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рд╣рд╛рде рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛, рдЗрд╕рд▓рд┐рдП рдпреВрдПрд╕рдмреА рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рдФрд░ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкреНрд▓рдЧ рдХрд░рдирд╛ рдЕрднреА рддрдХ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдареАрдХ рдХрд░реЗрдВрдЧреЗред рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?

рдиреАрдЪреЗ рдПрдХ рдкреБрд░рд╛рдиреА рдЦреЛрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╡реАрдбрд┐рдпреЛ рд╣реИ (рдЧреЛрдмрд▓реАрдВрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдХреЛрдИ рдХрдо рдкреНрд░рд┐рдп рдирд╣реАрдВ), рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЪрд┐рддреНрд░рдордп рд╢реЗрд▓ рдХреА рдХреБрдЫ рддрд╕реНрд╡реАрд░реЗрдВ рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рдПрд▓рд┐рдВрдХреНрд╕ рдХрдВрд╕реЛрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдЪрд▓рд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред





рдХрдВрд╕реЛрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ (рдлреЙрдиреНрдЯ VGA8x8)


рд╢реИрд▓ Gmenu2X рдореЗрдВ рдкрд╣рд▓рд╛ рдХрд┐рд░рдВрджрд┐рдпрд╛ рд╣рдмрд░


рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рд╛рдЗрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрд╕рдореЗрдВ


рд╕реЗрдЯрд┐рдВрдЧреНрд╕

рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдм рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд╣реИред рд╕рдлрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рддрдХ!

Source: https://habr.com/ru/post/In164635/


All Articles