•KroneckerProduct of matrices

     ClearAll[Global`*] ;
     KroneckerProduct[A_ ? MatrixQ, B_ ? MatrixQ] :=  
      
       With[{tensor = Outer[Times, Transpose[A], B]},     
      
         Flatten[MapThread[Join, tensor, 2], 1]]
     A = {{a11, a12}, {a21, a22}} ;
     B = {{b11, b12}, {b21, b22}} ;
     KroneckerProduct[A, B] // MatrixForm
     ( a11 b11   a11 b12   a12 b11   a12 b12 )
     
        a11 b21   a11 b22   a12 b21   a12 b22
     
        a21 b11   a21 b12   a22 b11   a22 b12
     
        a21 b21   a21 b22   a22 b21   a22 b22